Merge branch 'master' into topic/miurahr/notify-qtcreator-sdk

This commit is contained in:
Hiroshi Miura
2023-11-28 18:00:46 +09:00
committed by GitHub
91 changed files with 12669 additions and 1710 deletions

4
.git_archival.txt Normal file
View File

@@ -0,0 +1,4 @@
node: $Format:%H$
node-date: $Format:%cI$
describe-name: $Format:%(describe:tags=true,match=*[0-9]*)$
ref-names: $Format:%D$

1
.gitattributes vendored Normal file
View File

@@ -0,0 +1 @@
.git_archival.txt export-subst

View File

@@ -2,7 +2,7 @@
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
labels: bug
assignees: ''
---

View File

@@ -0,0 +1,17 @@
---
name: Document error
about: Report document errors or suggestions
title: ''
labels: documents
assignees: ''
---
**Describe the document error or request**
A clear and concise description of what the error is.
**Proposed change**
A clear and concise description of what you want to see.
**Additional context**
Add any other context about the problem here.

View File

@@ -2,7 +2,7 @@
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
labels: enhancement
assignees: ''
---

View File

@@ -14,7 +14,7 @@ jobs:
check_combinations:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- uses: actions/checkout@v3
with:
fetch-depth: 20
@@ -26,14 +26,13 @@ jobs:
branchtomerge: "origin/master"
branch: "update-combinations"
- name: Set up Python 3.8
uses: actions/setup-python@v2
- name: Set up Python 3.9
uses: actions/setup-python@v4
with:
python-version: 3.8
python-version: '3.9'
- name: Build and install
run: |
python setup.py --version
python -m pip install ./ --user
- name: Install generate_combinations dependencies

View File

@@ -1,4 +1,4 @@
name: Check package
name: Check tox tests, lint and types
on:
push:
@@ -16,14 +16,14 @@ jobs:
name: Check packaging 📦
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@master
- uses: actions/checkout@v3
with:
fetch-depth: 20
- run: git fetch --depth=1 origin +refs/tags/*:refs/tags/*
- name: Set up Python 3.8
uses: actions/setup-python@v2
- name: Set up Python 3.9
uses: actions/setup-python@v4
with:
python-version: 3.8
python-version: '3.9'
- name: Install tools
run: |
pip install -U pip

View File

@@ -28,12 +28,12 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v2
uses: actions/checkout@v3
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
uses: github/codeql-action/init@v2
with:
languages: ${{ matrix.language }}
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1
uses: github/codeql-action/analyze@v2

View File

@@ -15,15 +15,15 @@ jobs:
runs-on: ubuntu-20.04
steps:
- name: Checkout 🛎️
uses: actions/checkout@v2
uses: actions/checkout@v3
with:
fetch-depth: 50
- name: Fetch release tag
run: git fetch --depth=1 origin +refs/tags/*:refs/tags/*
- name: Set up Python 3.7🐍
uses: actions/setup-python@v1
- name: Set up Python 3.10🐍
uses: actions/setup-python@v4
with:
python-version: 3.7
python-version: '3.10'
- name: Install build and twine
run: python -m pip install build twine --user
- name: Build release assets
@@ -32,12 +32,12 @@ jobs:
run: python -m twine check dist/*
- name: Publish distribution 📦 to Test PyPI when releases branch
if: ${{ startsWith(github.event.ref, 'refs/heads/releases') }}
uses: pypa/gh-action-pypi-publish@master
uses: pypa/gh-action-pypi-publish@release/v1
with:
password: ${{ secrets.testpypi_password }}
repository_url: https://test.pypi.org/legacy/
- name: Publish distribution 📦 to PyPI
if: ${{ startsWith(github.event.ref, 'refs/tags') }}
uses: pypa/gh-action-pypi-publish@master
uses: pypa/gh-action-pypi-publish@release/v1
with:
password: ${{ secrets.pypi_password }}

View File

@@ -7,7 +7,7 @@ jobs:
create-release-notes:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- uses: actions/checkout@v3
- name: Create Release Notes
uses: docker://decathlon/release-notes-generator-action:2.0.0
env:

View File

@@ -1,19 +1,26 @@
name: Test on GH actions environment
on: push
on:
push:
branches:
- master
pull_request:
branches:
- master
- releases/*
jobs:
test:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [windows-latest, macOS-latest, ubuntu-latest]
py: [3.9]
qtver: [5.9.9, 5.12.8, 6.1.0]
os: [windows-latest, ubuntu-latest]
py: ["3.9", "3.12"]
qtver: [5.9.9, 6.1.0]
artifact: [standard]
include:
- os: windows-latest
py: 3.9
py: "3.10"
qtver: 6.1.0
artifact: binary
- os: ubuntu-20.04
@@ -22,15 +29,15 @@ jobs:
artifact: standard
exclude:
- os: ubuntu-latest
py: 3.9
py: "3.10"
qtver: 6.1.0
steps:
- uses: actions/checkout@v1
- uses: actions/checkout@v3
with:
fetch-depth: 20
- run: git fetch --depth=1 origin +refs/tags/*:refs/tags/*
- name: Set up Python
uses: actions/setup-python@v2
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.py }}
- name: Run pytest
@@ -40,12 +47,29 @@ jobs:
- name: Build and install
if: matrix.artifact == 'standard'
run: |
python setup.py --version
python -m pip install ./ --user
- name: Build Standalone binary
if: matrix.artifact == 'binary'
- name: Build Standalone binary(linux,mac)
if: matrix.artifact == 'binary' && matrix.os != 'windows-latest'
run: |
ci/build_standalone.bat
python -m venv venv
source venv/bin/activate
python -m pip install -U pip wheel setuptools setuptools_scm pyinstaller
python -m pip install .
python tools/build_standalone.py
deactivate
rm -rf venv
shell: bash
- name: Build Standalone binary(windows)
if: matrix.artifact == 'binary' && matrix.os == 'windows-latest'
run: |
python -m venv venv
venv/Scripts/activate.ps1
python -m pip install -U pip wheel setuptools setuptools_scm pyinstaller
python -m pip install .
python tools/build_standalone.py
deactivate
Remove-Item venv -Recurse -Force
shell: pwsh
- name: Run aqt
run: |
import os
@@ -57,11 +81,14 @@ jobs:
artifact = "${{ matrix.artifact }}"
platform = "${{ matrix.os }}"
qtver = "${{ matrix.qtver }}"
env = os.environ.copy()
github_workspace = pathlib.Path(env["GITHUB_WORKSPACE"])
if artifact == "binary":
if platform.startswith("windows"):
prefix = ["../.gravitybee/dist/latest/aqt.exe", "install"]
bin_path = str(github_workspace / "dist" / "aqt.exe")
else:
prefix = ["../.gravitybee/dist/latest/aqt", "install"]
bin_path = (github_workspace / "dist" / "aqt").as_posix()
prefix = [bin_path, "install"]
else:
prefix = ["python", "-m", "aqt", "install"]
command_line = []
@@ -81,8 +108,6 @@ jobs:
args = [qtver, "linux", "desktop", "gcc_64"]
command_line.extend(args)
command_line.extend(["--archives", "qtbase", "icu", "qt"])
env = os.environ.copy()
github_workspace = pathlib.Path(env["GITHUB_WORKSPACE"])
env["AQT_CONFIG"] = (github_workspace / "ci" / "settings.ini").as_posix()
env["LOG_CFG"] = (github_workspace / "ci" / "logging.ini").as_posix()
print("Execute: {}".format(command_line))
@@ -94,15 +119,16 @@ jobs:
if qtver.startswith('6'):
command_line6 = []
command_line6.extend(prefix)
if platform == 'ubuntu-20.04':
if platform.startswith("ubuntu"):
command_line6.extend([qtver, "linux", "android", "android_armv7"])
timeout = 360
elif platform == "macOS-latest":
elif platform.startswith("macOS"):
command_line6.extend([qtver, "mac", "ios", "ios"])
timeout = 360
else:
command_line6.extend([qtver, "windows", "android", "android_armv7"])
timeout = 360
print("Execute: {}".format(command_line6))
try:
res = subprocess.run(command_line6, timeout=timeout, check=True)
except subprocess.CalledProcessError as cpe:
@@ -164,4 +190,4 @@ jobs:
if: matrix.artifact == 'binary'
with:
name: aqt-${{ matrix.os }}-standalone
path: .gravitybee\dist\latest\aqt*
path: dist\aqt*

View File

@@ -12,45 +12,56 @@ on:
jobs:
build-standalone:
runs-on: ${{ matrix.os }}
runs-on: ${{ matrix.system.os }}
strategy:
matrix:
os: [windows-latest]
system: [
{os: windows-latest, arch: x86, output_file: 'aqt_x86.exe', primary_artifact: '', secondary_artifact: 'aqt_x86.exe'},
{os: windows-latest, arch: x64, output_file: 'aqt_x64.exe', primary_artifact: 'aqt.exe', secondary_artifact: 'aqt_x64.exe'},
{os: macOS-latest, arch: x64, output_file: 'aqt_x64', primary_artifact: 'aqt-macos', secondary_artifact: 'aqt-macos_x64'}
]
py: [3.9]
arch: [x86, x64]
defaults:
run:
shell: ${{ matrix.system.os == 'windows-latest' && 'pwsh' || 'bash' }} {0}
steps:
- uses: actions/checkout@v1
- uses: actions/checkout@v3
with:
fetch-depth: 20
- run: git fetch --depth=1 origin +refs/tags/*:refs/tags/*
- name: Set up Python
uses: actions/setup-python@v1
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.py }}
architecture: ${{ matrix.arch }}
architecture: ${{ matrix.system.arch }}
- name: Build standalone binary
run: |
ci/build_standalone.bat
cp .gravitybee\dist\latest\aqt.exe .gravitybee\dist\latest\aqt_${{ matrix.arch }}.exe
python -m venv venv
${{ matrix.system.os == 'windows-latest' && 'venv/Scripts/activate.ps1' || 'chmod +x venv/bin/activate && venv/bin/activate' }}
python -m pip install -U pip wheel setuptools setuptools_scm pyinstaller
python -m pip install .
python tools/build_standalone.py ${{ matrix.system.arch }}
${{ matrix.system.os == 'windows-latest' && 'deactivate' || 'chmod +x venv/bin/deactivate && venv/bin/deactivate' }}
${{ matrix.system.os == 'windows-latest' && 'Remove-Item venv -Recurse -Force' || 'rm -rf venv' }}
- name: Upload to Release
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: .gravitybee\dist\latest\aqt.exe
file: dist/${{ matrix.system.output_file }}
asset_name: ${{ matrix.system.primary_artifact }}
tag: ${{ github.ref }}
overwrite: true
if: matrix.arch=='x64'
if: matrix.system.primary_artifact!='' && startsWith(github.ref, 'refs/tags/v')
- name: Upload to Release for all architectures
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: .gravitybee\dist\latest\aqt_${{ matrix.arch }}.exe
file: dist/${{ matrix.system.output_file }}
asset_name: ${{ matrix.system.secondary_artifact }}
tag: ${{ github.ref }}
overwrite: true
if: matrix.system.secondary_artifact!='' && startsWith(github.ref, 'refs/tags/v')
- name: Update continuous build
uses: svenstaro/upload-release-action@v2
with:
@@ -58,9 +69,9 @@ jobs:
overwrite: true
prerelease: true
tag: Continuous
file: .gravitybee\dist\latest\aqt.exe
if: matrix.arch=='x64'
file: dist/${{ matrix.system.output_file }}
asset_name: ${{ matrix.system.primary_artifact }}
if: matrix.system.primary_artifact!='' && startsWith(github.ref, 'refs/tags/v')
- name: Update continuous build for all architectures
uses: svenstaro/upload-release-action@v2
with:
@@ -68,4 +79,6 @@ jobs:
overwrite: true
prerelease: true
tag: Continuous
file: .gravitybee\dist\latest\aqt_${{ matrix.arch }}.exe
file: dist/${{ matrix.system.output_file }}
asset_name: ${{ matrix.system.secondary_artifact }}
if: matrix.system.secondary_artifact!='' && startsWith(github.ref, 'refs/tags/v')

5
.gitignore vendored
View File

@@ -9,11 +9,12 @@ __pycache__
.idea
.tox
.venv
_build
ci/*.matrix.gen.yml
docs/_build
docs/_build/
*.mo
aqtinstall.log
Qt/
.gravitybee
.eggs
qtaccount.ini
.pytest_cache

View File

@@ -13,7 +13,6 @@ python:
path: .
extra_requirements:
- docs
system_packages: false
build:
os: ubuntu-22.04
@@ -21,7 +20,7 @@ build:
python: "3.10"
jobs:
post_checkout:
- git fetch --unshallow
- git fetch --depth 1000
pre_install:
- git update-index --assume-unchanged docs/conf.py
- pip install setuptools==62.4.0 setuptools_scm[toml]==6.4.2

View File

@@ -1,285 +0,0 @@
====================
aqtinstall changeLog
====================
All notable changes to this project will be documented in this file.
`Unreleased`_
=============
`v2.2.3`_ (17, Aug. 2022)
-------------------------
Fixed
-----
* Building standalone executable: aqt.exe (#556,#557)
Added
-----
* Docs: add explanation of ``list-qt --long-modules`` (#555)
`v2.2.2`_ (11, Aug. 2022)
-------------------------
Added
-----
* Add ``aqt list-qt --long-modules`` (#543,#547)
Fixed
-----
* Fix kwargs passed up AqtException inheritance tree (#550)
`v2.2.1`_ (9, Aug. 2022)
------------------------
Changed
-------
* ``install-qt`` command respect ``--base`` argument option when
retrieve metadata XML files by making ``MetadataFactory``
respect ``baseurl`` set. (#545)
`v2.2.0`_ (2, Aug. 2022)
------------------------
Added
-----
* Add code of conduct (#535)
Changed
-------
* test: prevent use of flake8@5.0 (#544)
* Improve tox and pytest config(#544)
* Properly retrieve folder names from html pages of all mirrors(#520)
* Log: left align the level name (#539)
* Update combinations (#537)
* Introduce Updates.xml data class and parser (#533)
* archives: do not keep update.xml text in field (#534)
* docs: Bump sphinx@5.0 (#524)
Fixed
-----
* Update readthedocs config (#535)
* Fix readme description of list-qt (#527)
Deprecated
----------
* Deprecate setup.py file (#531)
`v2.1.0`_ (14, Apr. 2022)
=========================
Changed
-------
* Change security policy(#506):
Supported 2.0.x
Unsupported 1.2.x and before
* Bump py7zr@0.18.3(#509)
* pyproject.toml configuration
* project section(#507)
* setuptools_scm settings(#508)
* Use SHA256 hash from trusted mirror for integrity check (#493)
* Update combinations.xml
* QtDesignStudio generation2 (#486)
* IFW version (from 42 to 43) change (#495)
* Support Qt 6.2.4 (#502)
* Update fallback mirror list (#485)
Fixed
-----
* Fix patching of Qt6.2.2-ios(#510, #503)
* Test: Conditionally install dependencies on Ubuntu (#494)
Added
-----
* doc: warn about unrelated aqt package (#490)
* doc: add explanation of --config flag in CLI docs (#491)
* doc: note about MSYS2/Mingw64 environment
Security
--------
* Use secrets for secure random numbers(#498)
* Use defusedxml to parse Updates.xml file to avoid attack(#498)
* Improve get_hash function(#504)
* Check Update.xml file with SHA256 hash (#493)
`v2.0.6`_ (7, Feb. 2022)
========================
Fixed
-----
* Fix archives flag(#459)
* Accept the case Update.xml in Server has delimiter without space(#479)
* Fix getUrl function to use property http session and retry(#473)
Added
-----
* 32bit release binary(#471)
Changed
-------
* Update combinations.xml
* Qt 6.2.2, 6.2.3, 6.3.0(#481,#484)
`v2.0.5`_ (11, Dec. 2021)
=========================
Changed
-------
* Reduce memory consumption: garbage collection on install subprocess(#464)
* Cache PowerShell modules on Azure Pipeline(#465)
`v2.0.4`_ (5, Dec. 2021)
=========================
Fixed
=====
* Allow duplicated install on the directory previously installed(#438,#462)
* Memory error on 32bit python on Windows(#436,#462)
Changed
=======
* Change list-src, list-doc and list-example command(#453)
`v2.0.3`_ (25, Nov. 2021)
=========================
Added
-----
* Improve --keep and new --archive-dest options(#458)
Fixed
-----
* Fix cross-platform installation failure (#450)
* CI: update OSes, Windows-2019, macOS-10.15(#444,#456)
* CI: fix failure of uploading coveralls(#446)
* CI: test for QtIFW(#451)
Changed
-------
* combinations matrix json(#452)
`v2.0.2`_ (1, Nov. 2021)
=========================
Added
-----
* Support Qt 6.2.1 (#441)
Fixed
-----
* Degraded install-tool (#442,#443)
Changed
-------
* Add suggestion to use ``--external`` for MemoryError (#439)
`v2.0.1`_ (29, Oct. 2021)
=========================
Added
-----
* Allow retries on checksum error(#420)
* Run on Python 3.10(#424)
* Add more mirrors for fallback(#432)
* Add fallback URL message(#434)
Fixed
-----
* ``--noarchives`` inconsistency(#429)
* Allow multiprocessing error propagation(#419)
* Legacy command behavior, reproduce also old bugs (#414)
* Fix crash on ``crash install-qt <host> <tgt> <spec>`` with no specified arch(#435)
Changed
-------
* Print working directory and version in error message(#418)
Security
--------
* Use HTTPS for mirror site(#430)
`v2.0.0`_ (29, Sep. 2021)
=========================
Added
-----
* Add error messages when user inputs an invalid semantic version(#291)
* Security Policy document(#341)
* CodeQL static code analysis(#341)
* CI: generate combination json in actions (#318,#343)
* Test: add and improve unit tests(#327,#359)
* Docs: getting started section(#351)
* Docs: recommend python3 for old systems(#349)
* Automatically update combinations.json (#343,#344,#345,#386,#390,#395)
* CI: test with Qt6.2 with modules(#346)
* README: link documentation for stable(#329)
* Support WASM on Qt 6.2.0(#384)
* Add Binary distribution for Windows(#393,#397)
* Add list-qt --archives feature(#400)
* Require architecture when listing modules(#401)
Changed
-------
* list subcommand now support tool information(#235)
* list subcommand can show versions, architectures and modules.(#235)
* C: bundle jom.zip in source(#295)
* Add max_retries configuration for connection(#296)
* Change settings.ini to introduce [requests] section(#297)
* Change log format for logging file.
* Extension validation for tool subcommand(#314)
* list subcommand has --tool-long option(#304, #319)
* tool subcommand now install without version spec(#299)
* README example command is now easy to copy-and-paste(#322)
* list subcommand update(#331)
* Improve handle of Ctrl-C keyboard interruption(#337)
* Update combinations.json(#344,#386)
* Turn warnings into errors when building docs(#360)
* Update documentations(#358,#357)
* Test: consolidate lint configuration to pyproject.toml(#356)
* Test: black configuration to max_line_length=125 (#356)
* New subcommand syntax (#354,#355)
* Failed on missing modules(#374)
* Failed on missing tools(#375)
* Remove 'addons' prefix for some modules for Qt6+ (#368)
* Fix inappropriate warnings(#370)
* Update README to fix version 2 (#377)
* list-qt: Specify version by SimpleSpec(#392)
* Add helpful error messages when modules/tools/Qt version does not exist(#402)
Fixed
-----
* Fix helper.getUrl() to handle several response statuses(#292)
* Fix Qt 6.2.0 target path for macOS.(#289)
* Fix WinRT installation patching(#311)
* Fix Qt 5.9.0 installation (#312)
* Link documentations for stable/latest on README
* Check python version when starting command (#352)
* README: remove '$' from example command line(#321)
* README: fix command line example lexer(#322)
* CI: fix release script launch conditions(#298)
* Handle special case for Qt 5.9.0(#364)
* Running python2 -m aqt does not trigger Python version check (#372,#373)
* docs(cli): correct the parameter of "list-tool" in an example(#399)
* Doc: Fix broken mirror link in cli.rst (#403)
* CI: fix release action fails with no files found(#405)
.. _Unreleased: https://github.com/miurahr/aqtinstall/compare/v2.2.3...HEAD
.. _v2.2.3: https://github.com/miurahr/aqtinstall/compare/v2.2.2...v2.2.3
.. _v2.2.2: https://github.com/miurahr/aqtinstall/compare/v2.2.1...v2.2.2
.. _v2.2.1: https://github.com/miurahr/aqtinstall/compare/v2.2.0...v2.2.1
.. _v2.2.0: https://github.com/miurahr/aqtinstall/compare/v2.1.0...v2.2.0
.. _v2.1.0: https://github.com/miurahr/aqtinstall/compare/v2.0.6...v2.1.0
.. _v2.0.6: https://github.com/miurahr/aqtinstall/compare/v2.0.5...v2.0.6
.. _v2.0.5: https://github.com/miurahr/aqtinstall/compare/v2.0.4...v2.0.5
.. _v2.0.4: https://github.com/miurahr/aqtinstall/compare/v2.0.3...v2.0.4
.. _v2.0.3: https://github.com/miurahr/aqtinstall/compare/v2.0.2...v2.0.3
.. _v2.0.2: https://github.com/miurahr/aqtinstall/compare/v2.0.1...v2.0.2
.. _v2.0.1: https://github.com/miurahr/aqtinstall/compare/v2.0.0...v2.0.1
.. _v2.0.0: https://github.com/miurahr/aqtinstall/compare/v1.2.5...v2.0.0

View File

@@ -1,6 +1,5 @@
include *.rst
include *.txt
include *.cfg
include LICENSE
include pyproject.toml
include .flake8
@@ -10,15 +9,15 @@ recursive-include docs *.bat
recursive-include docs *.py
recursive-include docs *.rst
recursive-include docs Makefile
recursive-include docs *.po
recursive-include docs *.pot
recursive-include tests *.html
recursive-include tests *.ini
recursive-include tests *.json
recursive-include tests *.py
recursive-include tests *.xml
recursive-include tools *.py
prune .github
exclude .gitignore
exclude .readthedocs.yml
exclude azure-pipelines.yml
exclude qtaccount.ini
exclude aqtinstall.log

View File

@@ -4,6 +4,7 @@ Another Qt installer(aqt)
- Release: |pypi|
- Documentation: |docs|
- Test status: |gha| and Coverage: |coveralls|
- Project maturity |Package health|
.. |pypi| image:: https://badge.fury.io/py/aqtinstall.svg
:target: http://badge.fury.io/py/aqtinstall
@@ -13,6 +14,11 @@ Another Qt installer(aqt)
:target: https://github.com/miurahr/aqtinstall/actions?query=workflow%3A%22Test+on+GH+actions+environment%22
.. |coveralls| image:: https://coveralls.io/repos/github/miurahr/aqtinstall/badge.svg?branch=master
:target: https://coveralls.io/github/miurahr/aqtinstall?branch=master
.. |Package health| image:: https://snyk.io/advisor/python/aqtinstall/badge.svg
:target: https://snyk.io/advisor/python/aqtinstall
:alt: aqtinstall
This is a utility alternative to the official graphical Qt installer, for using in CI environment
where an interactive UI is not usable, or just on command line.
@@ -48,7 +54,7 @@ Requirements
------------
- Minimum Python version:
3.6
3.7
- Recommended Python version:
3.9 (frequently tested on)
@@ -60,7 +66,6 @@ Requirements
py7zr
texttable
bs4
dataclasses; python_version < "3.7"
defusedxml
- Operating Systems:
@@ -74,10 +79,9 @@ There is precise documentation with many examples.
You are recommended to read the *Getting started* section.
- Getting started: https://aqtinstall.readthedocs.io/en/latest/getting_started.html
- Stable (v2.1.x): https://aqtinstall.readthedocs.io/en/stable
- Stable (v3.0.x): https://aqtinstall.readthedocs.io/en/stable
- Latest: https://aqtinstall.readthedocs.io/en/latest
- Old (v2.0.6) : https://aqtinstall.readthedocs.io/en/v2.0.6/
- Obsolete (v1.2.5) : https://aqtinstall.readthedocs.io/en/v1.2.5/index.html
- Old (v2.2.3) : https://aqtinstall.readthedocs.io/en/v2.2.3/
Install
-------
@@ -147,6 +151,12 @@ To install Qt 6.2.0 with the modules 'qtcharts' and 'qtnetworking', you can use
aqt install-qt windows desktop 6.2.0 win64_mingw81 -m qtcharts qtnetworking
When you want to install Qt for android with required desktop toolsets
.. code-block:: console
aqt install-qt linux android 5.13.2 android_armv7 --autodesktop
When aqtinstall downloads and installs packages, it updates package configurations
such as prefix directory in ``bin/qt.conf``, and ``bin/qconfig.pri``
@@ -155,6 +165,14 @@ to make it working well with installed directory.
.. note::
It is your own task to set some environment variables to fit your platform, such as PATH, QT_PLUGIN_PATH, QML_IMPORT_PATH, and QML2_IMPORT_PATH. aqtinstall will never do it for you, in order not to break the installation of multiple versions.
.. warning::
If you are using aqtinstall to install the ios version of Qt, please be aware that
there are compatibility issues between XCode 13+ and versions of Qt less than 6.2.4.
You may use aqtinstall to install older versions of Qt for ios, but the developers of
aqtinstall cannot guarantee that older versions will work on the most recent versions of MacOS.
Aqtinstall is tested for ios on MacOS 12 with Qt 6.2.4 and greater.
All earlier versions of Qt are expected not to function.
Testimonies
-----------
@@ -188,7 +206,7 @@ Some projects utilize aqtinstall, and there are several articles and discussions
* Qt Study group presentation: `Another Qt CLI installer`_
.. _`Fast and lightweight headless Qt Installer from Qt Mirrors - aqtinstall`: https://mindflakes.com/posts/1/01/01/fast-and-lightweight-headless-qt-installer-from-qt-mirrors-aqtinstall/
.. _`Fast and lightweight headless Qt Installer from Qt Mirrors - aqtinstall`: https://mindflakes.com/posts/2019/06/02/fast-and-lightweight-headless-qt-installer-from-qt-mirrors-aqtinstall/
.. _`Using Azure DevOps Pipelines with Qt`: https://lostdomain.org/2019/12/27/using-azure-devops-pipelines-with-qt/
.. _`Using Azure CI for cross-platform Linux and Windows Qt application builds`: https://www.wincak.name/programming/using-azure-ci-for-cross-platform-linux-and-windows-qt-application-builds/
.. _`Automatic installation for Travis CI (or any other CI)`: https://forum.qt.io/topic/114520/automatic-installation-for-travis-ci-or-any-other-ci/2

View File

@@ -22,11 +22,12 @@
import posixpath
from dataclasses import dataclass, field
from logging import getLogger
from typing import Dict, Iterable, List, Optional, Tuple
from typing import Dict, Iterable, List, Optional, Set, Tuple
from xml.etree.ElementTree import Element # noqa
from defusedxml import ElementTree
from aqt.exceptions import ArchiveDownloadError, ArchiveListError, NoPackageFound
from aqt.exceptions import ArchiveDownloadError, ArchiveListError, ChecksumDownloadFailure, NoPackageFound
from aqt.helper import Settings, get_hash, getUrl, ssplit
from aqt.metadata import QtRepoProperty, Version
@@ -124,13 +125,21 @@ class PackageUpdate:
description: str
release_date: str
full_version: str
dependencies: List[str]
auto_dependon: Optional[List[str]]
downloadable_archives: Optional[List[str]]
dependencies: Iterable[str]
auto_dependon: Iterable[str]
downloadable_archives: Iterable[str]
default: bool
virtual: bool
base: str
def __post_init__(self):
for iter_of_str in self.dependencies, self.auto_dependon, self.downloadable_archives:
assert isinstance(iter_of_str, Iterable) and not isinstance(iter_of_str, str)
for _str in self.name, self.display_name, self.description, self.release_date, self.full_version, self.base:
assert isinstance(_str, str)
for boolean in self.default, self.virtual:
assert isinstance(boolean, bool)
@property
def version(self):
return Version.permissive(self.full_version)
@@ -219,7 +228,7 @@ class Updates:
def merge(self, other):
self.package_updates.extend(other.package_updates)
def get_depends(self, target: str):
def get_depends(self, target: str) -> Iterable[str]:
# initialize
filo = [target]
packages = []
@@ -237,19 +246,18 @@ class Updates:
filo.append(depend)
return packages
def _get_text(self, item):
def _get_text(self, item: Optional[Element]) -> str:
if item is not None and item.text is not None:
return item.text
else:
return ""
return ""
def _get_list(self, item):
def _get_list(self, item: Optional[Element]) -> Iterable[str]:
if item is not None and item.text is not None:
return ssplit(item.text)
else:
return None
return []
def _get_boolean(self, item):
def _get_boolean(self, item) -> bool:
if "true" == item:
return True
else:
@@ -285,7 +293,7 @@ class QtArchives:
self.logger = getLogger("aqt.archives")
self.archives: List[QtPackage] = []
self.subarchives: Optional[Iterable[str]] = subarchives
self.mod_list: Iterable[str] = modules or []
self.mod_list: Set[str] = set(modules or [])
self.is_include_base_package: bool = is_include_base_package
self.timeout = timeout
try:
@@ -342,8 +350,6 @@ class QtArchives:
return ModuleToPackage({})
base_package = {self._base_module_name(): list(self._base_package_names())}
target_packages = ModuleToPackage(base_package if self.is_include_base_package else {})
if self.all_extra:
return target_packages
for module in self.mod_list:
suffix = self._module_name_suffix(module)
package_names = [
@@ -384,7 +390,16 @@ class QtArchives:
def _download_update_xml(self, update_xml_path):
"""Hook for unit test."""
xml_hash = get_hash(update_xml_path, "sha256", self.timeout)
if not Settings.ignore_hash:
try:
xml_hash = get_hash(update_xml_path, Settings.hash_algorithm, self.timeout)
except ChecksumDownloadFailure:
self.logger.warning(
"Failed to download checksum for the file 'Updates.xml'. This may happen on unofficial mirrors."
)
xml_hash = None
else:
xml_hash = None
return getUrl(posixpath.join(self.base, update_xml_path), self.timeout, xml_hash)
def _parse_update_xml(self, os_target_folder, update_xml_text, target_packages: Optional[ModuleToPackage]):
@@ -399,11 +414,11 @@ class QtArchives:
for packageupdate in package_updates:
if not self.all_extra:
target_packages.remove_module_for_package(packageupdate.name)
should_filter_archives: bool = self.subarchives and self.should_filter_archives(packageupdate.name)
should_filter_archives: bool = bool(self.subarchives) and self.should_filter_archives(packageupdate.name)
for archive in packageupdate.downloadable_archives:
archive_name = archive.split("-", maxsplit=1)[0]
if should_filter_archives and archive_name not in self.subarchives:
if should_filter_archives and self.subarchives is not None and archive_name not in self.subarchives:
continue
archive_path = posixpath.join(
# online/qtsdkrepository/linux_x64/desktop/qt5_5150/
@@ -426,7 +441,7 @@ class QtArchives:
# if we have located every requested package, then target_packages will be empty
if not self.all_extra and len(target_packages) > 0:
message = f"The packages {target_packages} were not found while parsing XML of package information!"
raise NoPackageFound(message, suggested_action=self.help_msg(target_packages.get_modules()))
raise NoPackageFound(message, suggested_action=self.help_msg(list(target_packages.get_modules())))
def _append_tool_update(self, os_target_folder, update_xml, target, tool_version_str):
packageupdate = update_xml.get(target)
@@ -463,12 +478,13 @@ class QtArchives:
)
)
def help_msg(self, missing_modules: Iterable[str]) -> Iterable[str]:
def help_msg(self, missing_modules: Optional[List[str]] = None) -> List[str]:
_missing_modules: List[str] = missing_modules or []
base_cmd = f"aqt list-qt {self.os_name} {self.target}"
arch = f"Please use '{base_cmd} --arch {self.version}' to show architectures available."
mods = f"Please use '{base_cmd} --modules {self.version} <arch>' to show modules available."
has_base_pkg: bool = self._base_module_name() in missing_modules
has_non_base_pkg: bool = len(list(missing_modules)) > 1 or not has_base_pkg
has_base_pkg: bool = self._base_module_name() in _missing_modules
has_non_base_pkg: bool = len(list(_missing_modules)) > 1 or not has_base_pkg
messages = []
if has_base_pkg:
messages.append(arch)
@@ -499,7 +515,7 @@ class SrcDocExamplesArchives(QtArchives):
def __init__(
self,
flavor,
flavor: str,
os_name,
target,
version,
@@ -510,7 +526,7 @@ class SrcDocExamplesArchives(QtArchives):
is_include_base_package: bool = True,
timeout=(5, 5),
):
self.flavor = flavor
self.flavor: str = flavor
self.target = target
self.os_name = os_name
self.base = base
@@ -548,11 +564,12 @@ class SrcDocExamplesArchives(QtArchives):
"""
return TargetConfig("src_doc_examples", self.target, self.arch, self.os_name)
def help_msg(self, missing_modules: Iterable[str]) -> Iterable[str]:
def help_msg(self, missing_modules: Optional[List[str]] = None) -> List[str]:
_missing_modules: List[str] = missing_modules or []
cmd_type = "example" if self.flavor == "examples" else self.flavor
base_cmd = f"aqt list-{cmd_type} {self.os_name} {self.version}"
mods = f"Please use '{base_cmd} --modules' to show modules available."
has_non_base_pkg: bool = len(list(missing_modules)) > 1
has_non_base_pkg: bool = len(list(_missing_modules)) > 1
messages = []
if has_non_base_pkg:
messages.append(mods)
@@ -574,8 +591,8 @@ class ToolArchives(QtArchives):
tool_name: str,
base: str,
version_str: Optional[str] = None,
arch: Optional[str] = None,
timeout: Tuple[int, int] = (5, 5),
arch: str = "",
timeout: Tuple[float, float] = (5, 5),
):
self.tool_name = tool_name
self.os_name = os_name
@@ -605,7 +622,7 @@ class ToolArchives(QtArchives):
update_xml = Updates.fromstring(self.base, update_xml_text)
self._append_tool_update(os_target_folder, update_xml, self.arch, self.tool_version_str)
def help_msg(self, *args) -> Iterable[str]:
def help_msg(self, *args) -> List[str]:
return [f"Please use 'aqt list-tool {self.os_name} {self.target} {self.tool_name}' to show tool variants available."]
def get_target_config(self) -> TargetConfig:

View File

@@ -234,6 +234,83 @@
"qtwebview"
],
"qt_version": "6.4"
},
{
"modules": [
"debug_info",
"qt3d",
"qt5compat",
"qtcharts",
"qtconnectivity",
"qtdatavis3d",
"qtgrpc",
"qthttpserver",
"qtimageformats",
"qtlanguageserver",
"qtlocation",
"qtlottie",
"qtmultimedia",
"qtnetworkauth",
"qtpdf",
"qtpositioning",
"qtquick3d",
"qtquick3dphysics",
"qtquickeffectmaker",
"qtquicktimeline",
"qtremoteobjects",
"qtscxml",
"qtsensors",
"qtserialbus",
"qtserialport",
"qtshadertools",
"qtspeech",
"qtvirtualkeyboard",
"qtwaylandcompositor",
"qtwebchannel",
"qtwebengine",
"qtwebsockets",
"qtwebview"
],
"qt_version": "6.5"
},
{
"modules": [
"debug_info",
"qt3d",
"qt5compat",
"qtcharts",
"qtconnectivity",
"qtdatavis3d",
"qtgraphs",
"qtgrpc",
"qthttpserver",
"qtimageformats",
"qtlanguageserver",
"qtlocation",
"qtlottie",
"qtmultimedia",
"qtnetworkauth",
"qtpdf",
"qtpositioning",
"qtquick3d",
"qtquick3dphysics",
"qtquickeffectmaker",
"qtquicktimeline",
"qtremoteobjects",
"qtscxml",
"qtsensors",
"qtserialbus",
"qtserialport",
"qtshadertools",
"qtspeech",
"qtvirtualkeyboard",
"qtwaylandcompositor",
"qtwebchannel",
"qtwebengine",
"qtwebsockets",
"qtwebview"
],
"qt_version": "6.6"
}
],
"new_archive": [
@@ -291,6 +368,16 @@
"os_name": "linux",
"target": "desktop"
},
{
"arch": "wasm_multithread",
"os_name": "linux",
"target": "desktop"
},
{
"arch": "wasm_singlethread",
"os_name": "linux",
"target": "desktop"
},
{
"arch": "android",
"os_name": "mac",
@@ -326,6 +413,16 @@
"os_name": "mac",
"target": "desktop"
},
{
"arch": "wasm_multithread",
"os_name": "mac",
"target": "desktop"
},
{
"arch": "wasm_singlethread",
"os_name": "mac",
"target": "desktop"
},
{
"arch": "ios",
"os_name": "mac",
@@ -361,6 +458,16 @@
"os_name": "windows",
"target": "desktop"
},
{
"arch": "wasm_multithread",
"os_name": "windows",
"target": "desktop"
},
{
"arch": "wasm_singlethread",
"os_name": "windows",
"target": "desktop"
},
{
"arch": "win32_mingw53",
"os_name": "windows",
@@ -478,6 +585,12 @@
}
],
"tools": [
{
"arch": "qt.tools.qtcreator",
"os_name": "linux",
"target": "desktop",
"tool_name": "sdktool"
},
{
"arch": "qt.tools.cmake",
"os_name": "linux",
@@ -503,7 +616,7 @@
"tool_name": "tools_generic"
},
{
"arch": "qt.tools.ifw.44",
"arch": "qt.tools.ifw.46",
"os_name": "linux",
"target": "desktop",
"tool_name": "tools_ifw"
@@ -521,16 +634,10 @@
"tool_name": "tools_ninja"
},
{
"arch": "qt.tools.openssl.src",
"arch": "qt.tools.opensslv3.src",
"os_name": "linux",
"target": "desktop",
"tool_name": "tools_openssl_src"
},
{
"arch": "qt.tools.openssl.gcc_64",
"os_name": "linux",
"target": "desktop",
"tool_name": "tools_openssl_x64"
"tool_name": "tools_opensslv3_src"
},
{
"arch": "qt.tools.qt3dstudio",
@@ -562,6 +669,30 @@
"target": "desktop",
"tool_name": "tools_qtcreator"
},
{
"arch": "qt.tools.qtcreator_gui",
"os_name": "linux",
"target": "desktop",
"tool_name": "tools_qtcreator_gui"
},
{
"arch": "qt.tools.qtcreator_gui.src",
"os_name": "linux",
"target": "desktop",
"tool_name": "tools_qtcreator_gui"
},
{
"arch": "qt.tools.qtcreatordbg",
"os_name": "linux",
"target": "desktop",
"tool_name": "tools_qtcreator_gui"
},
{
"arch": "qt.tools.qtcreatordev",
"os_name": "linux",
"target": "desktop",
"tool_name": "tools_qtcreator_gui"
},
{
"arch": "qt.tools.qtdesignstudio",
"os_name": "linux",
@@ -574,12 +705,36 @@
"target": "desktop",
"tool_name": "tools_qtdesignstudio_generation2"
},
{
"arch": "qtdesignstudio.lts",
"os_name": "linux",
"target": "desktop",
"tool_name": "tools_qtdesignstudio_generation2_lts"
},
{
"arch": "qt.tools.qtcreator.telemetry",
"os_name": "linux",
"target": "desktop",
"tool_name": "tools_telemetry"
},
{
"arch": "qt.tools.qtcreator_gui.telemetry_evaluator",
"os_name": "linux",
"target": "desktop",
"tool_name": "tools_telemetry_eval_gui"
},
{
"arch": "qt.tools.qtcreator_gui.telemetry",
"os_name": "linux",
"target": "desktop",
"tool_name": "tools_telemetry_gui"
},
{
"arch": "qt.tools.qtcreator",
"os_name": "mac",
"target": "desktop",
"tool_name": "sdktool"
},
{
"arch": "qt.tools.cmake",
"os_name": "mac",
@@ -605,7 +760,7 @@
"tool_name": "tools_generic"
},
{
"arch": "qt.tools.ifw.44",
"arch": "qt.tools.ifw.46",
"os_name": "mac",
"target": "desktop",
"tool_name": "tools_ifw"
@@ -646,6 +801,24 @@
"target": "desktop",
"tool_name": "tools_qtcreator"
},
{
"arch": "qt.tools.qtcreator_gui",
"os_name": "mac",
"target": "desktop",
"tool_name": "tools_qtcreator_gui"
},
{
"arch": "qt.tools.qtcreatordbg",
"os_name": "mac",
"target": "desktop",
"tool_name": "tools_qtcreator_gui"
},
{
"arch": "qt.tools.qtcreatordev",
"os_name": "mac",
"target": "desktop",
"tool_name": "tools_qtcreator_gui"
},
{
"arch": "qt.tools.qtdesignstudio",
"os_name": "mac",
@@ -658,12 +831,36 @@
"target": "desktop",
"tool_name": "tools_qtdesignstudio_generation2"
},
{
"arch": "qtdesignstudio.lts",
"os_name": "mac",
"target": "desktop",
"tool_name": "tools_qtdesignstudio_generation2_lts"
},
{
"arch": "qt.tools.qtcreator.telemetry",
"os_name": "mac",
"target": "desktop",
"tool_name": "tools_telemetry"
},
{
"arch": "qt.tools.qtcreator_gui.telemetry_evaluator",
"os_name": "mac",
"target": "desktop",
"tool_name": "tools_telemetry_eval_gui"
},
{
"arch": "qt.tools.qtcreator_gui.telemetry",
"os_name": "mac",
"target": "desktop",
"tool_name": "tools_telemetry_gui"
},
{
"arch": "qt.tools.qtcreator",
"os_name": "windows",
"target": "desktop",
"tool_name": "sdktool"
},
{
"arch": "qt.tools.cmake",
"os_name": "windows",
@@ -689,7 +886,7 @@
"tool_name": "tools_generic"
},
{
"arch": "qt.tools.ifw.44",
"arch": "qt.tools.ifw.46",
"os_name": "windows",
"target": "desktop",
"tool_name": "tools_ifw"
@@ -773,22 +970,16 @@
"tool_name": "tools_ninja"
},
{
"arch": "qt.tools.openssl.src",
"arch": "qt.tools.opensslv3.src",
"os_name": "windows",
"target": "desktop",
"tool_name": "tools_openssl_src"
"tool_name": "tools_opensslv3_src"
},
{
"arch": "qt.tools.openssl.win_x64",
"arch": "qt.tools.opensslv3.win_x64",
"os_name": "windows",
"target": "desktop",
"tool_name": "tools_openssl_x64"
},
{
"arch": "qt.tools.openssl.win_x86",
"os_name": "windows",
"target": "desktop",
"tool_name": "tools_openssl_x86"
"tool_name": "tools_opensslv3_x64"
},
{
"arch": "qt.tools.qt3dstudio",
@@ -820,6 +1011,30 @@
"target": "desktop",
"tool_name": "tools_qtcreator"
},
{
"arch": "qt.tools.qtcreator_gui",
"os_name": "windows",
"target": "desktop",
"tool_name": "tools_qtcreator_gui"
},
{
"arch": "qt.tools.qtcreatorcdbext",
"os_name": "windows",
"target": "desktop",
"tool_name": "tools_qtcreator_gui"
},
{
"arch": "qt.tools.qtcreatordbg",
"os_name": "windows",
"target": "desktop",
"tool_name": "tools_qtcreator_gui"
},
{
"arch": "qt.tools.qtcreatordev",
"os_name": "windows",
"target": "desktop",
"tool_name": "tools_qtcreator_gui"
},
{
"arch": "qt.tools.windows_kits_debuggers",
"os_name": "windows",
@@ -838,12 +1053,30 @@
"target": "desktop",
"tool_name": "tools_qtdesignstudio_generation2"
},
{
"arch": "qtdesignstudio.lts",
"os_name": "windows",
"target": "desktop",
"tool_name": "tools_qtdesignstudio_generation2_lts"
},
{
"arch": "qt.tools.qtcreator.telemetry",
"os_name": "windows",
"target": "desktop",
"tool_name": "tools_telemetry"
},
{
"arch": "qt.tools.qtcreator_gui.telemetry_evaluator",
"os_name": "windows",
"target": "desktop",
"tool_name": "tools_telemetry_eval_gui"
},
{
"arch": "qt.tools.qtcreator_gui.telemetry",
"os_name": "windows",
"target": "desktop",
"tool_name": "tools_telemetry_gui"
},
{
"arch": "qt.tools.vcredist",
"os_name": "windows",
@@ -960,7 +1193,17 @@
"6.2.4",
"6.3.0",
"6.3.1",
"6.4.0"
"6.3.2",
"6.4.0",
"6.4.1",
"6.4.2",
"6.4.3",
"6.5.0",
"6.5.1",
"6.5.2",
"6.5.3",
"6.6.0",
"6.6.1"
]
}
]

View File

@@ -29,7 +29,7 @@ class AqtException(Exception):
self.should_show_help: bool = should_show_help or False
super(AqtException, self).__init__(*args, **kwargs)
def __format__(self, format_spec) -> str:
def __format__(self, format_spec: str) -> str:
base_msg = "{}".format(super(AqtException, self).__format__(format_spec))
if not self.suggested_action:
return base_msg
@@ -40,7 +40,7 @@ class AqtException(Exception):
["* " + suggestion for suggestion in self.suggested_action]
)
def append_suggested_follow_up(self, suggestions: List[str]):
def append_suggested_follow_up(self, suggestions: List[str]) -> None:
self.suggested_action.extend(suggestions)
@@ -106,3 +106,11 @@ class OutOfMemory(AqtException):
class QmakeNotFound(AqtException):
pass
class OutOfDiskSpace(AqtException):
pass
class DiskAccessNotPermitted(AqtException):
pass

View File

@@ -27,10 +27,11 @@ import os
import posixpath
import secrets
import sys
from logging import getLogger
import threading
from logging import Handler, getLogger
from logging.handlers import QueueListener
from pathlib import Path
from typing import Callable, Dict, Generator, List, Optional, Tuple
from typing import Any, Callable, Dict, Generator, List, Optional, TextIO, Tuple, Union
from urllib.parse import urlparse
from xml.etree.ElementTree import Element
@@ -48,7 +49,7 @@ from aqt.exceptions import (
)
def _get_meta(url: str):
def _get_meta(url: str) -> requests.Response:
return requests.get(url + ".meta4")
@@ -57,7 +58,7 @@ def _check_content_type(ct: str) -> bool:
return any(ct.startswith(t) for t in candidate)
def getUrl(url: str, timeout, expected_hash: Optional[bytes] = None) -> str:
def getUrl(url: str, timeout: Tuple[float, float], expected_hash: Optional[bytes] = None) -> str:
"""
Gets a file from `url` via HTTP GET.
@@ -91,9 +92,17 @@ def getUrl(url: str, timeout, expected_hash: Optional[bytes] = None) -> str:
if r.status_code != 200:
msg = f"Failed to retrieve file at {url}\nServer response code: {r.status_code}, reason: {r.reason}"
raise ArchiveDownloadError(msg)
result = r.text
result: str = r.text
filename = url.split("/")[-1]
actual_hash = hashlib.sha256(bytes(result, "utf-8")).digest()
_kwargs = {"usedforsecurity": False} if sys.version_info >= (3, 9) else {}
if Settings.hash_algorithm == "sha256":
actual_hash = hashlib.sha256(bytes(result, "utf-8"), **_kwargs).digest()
elif Settings.hash_algorithm == "sha1":
actual_hash = hashlib.sha1(bytes(result, "utf-8"), **_kwargs).digest()
elif Settings.hash_algorithm == "md5":
actual_hash = hashlib.md5(bytes(result, "utf-8"), **_kwargs).digest()
else:
raise ArchiveChecksumError(f"Unknown hash algorithm: {Settings.hash_algorithm}.\nPlease check settings.ini")
if expected_hash is not None and expected_hash != actual_hash:
raise ArchiveChecksumError(
f"Downloaded file {filename} is corrupted! Detect checksum error.\n"
@@ -103,7 +112,7 @@ def getUrl(url: str, timeout, expected_hash: Optional[bytes] = None) -> str:
return result
def downloadBinaryFile(url: str, out: Path, hash_algo: str, exp: bytes, timeout):
def downloadBinaryFile(url: str, out: Path, hash_algo: str, exp: Optional[bytes], timeout: Tuple[float, float]) -> None:
logger = getLogger("aqt.helper")
filename = Path(url).name
with requests.sessions.Session() as session:
@@ -125,7 +134,10 @@ def downloadBinaryFile(url: str, out: Path, hash_algo: str, exp: bytes, timeout)
except requests.exceptions.Timeout as e:
raise ArchiveConnectionError(f"Connection timeout: {e.args}") from e
else:
hash = hashlib.new(hash_algo)
if sys.version_info >= (3, 9):
hash = hashlib.new(hash_algo, usedforsecurity=False)
else:
hash = hashlib.new(hash_algo)
try:
with open(out, "wb") as fd:
for chunk in r.iter_content(chunk_size=8196):
@@ -142,7 +154,7 @@ def downloadBinaryFile(url: str, out: Path, hash_algo: str, exp: bytes, timeout)
)
def retry_on_errors(action: Callable[[], any], acceptable_errors: Tuple, num_retries: int, name: str):
def retry_on_errors(action: Callable[[], Any], acceptable_errors: Tuple, num_retries: int, name: str) -> Any:
logger = getLogger("aqt.helper")
for i in range(num_retries):
try:
@@ -158,7 +170,7 @@ def retry_on_errors(action: Callable[[], any], acceptable_errors: Tuple, num_ret
raise e from e
def retry_on_bad_connection(function: Callable[[str], any], base_url: str):
def retry_on_bad_connection(function: Callable[[str], Any], base_url: str) -> Any:
logger = getLogger("aqt.helper")
fallback_url = secrets.choice(Settings.fallbacks)
try:
@@ -177,7 +189,7 @@ def iter_list_reps(_list: List, num_reps: int) -> Generator:
list_index = 0
def get_hash(archive_path: str, algorithm: str, timeout) -> bytes:
def get_hash(archive_path: str, algorithm: str, timeout: Tuple[float, float]) -> bytes:
"""
Downloads a checksum and unhexlifies it to a `bytes` object, guaranteed to be the right length.
Raises ChecksumDownloadFailure if the download failed, or if the checksum was un unexpected length.
@@ -206,11 +218,11 @@ def get_hash(archive_path: str, algorithm: str, timeout) -> bytes:
)
def altlink(url: str, alt: str):
def altlink(url: str, alt: str) -> str:
"""
Blacklisting redirected(alt) location based on Settings.blacklist configuration.
When found black url, then try download a url + .meta4 that is a metalink version4
xml file, parse it and retrieve best alternative url.
Blacklisting redirected(alt) location based on Settings. Blacklist configuration.
When found black url, then try download an url + .meta4 that is a metalink version4
xml file, parse it and retrieve the best alternative url.
"""
logger = getLogger("aqt.helper")
if not any(alt.startswith(b) for b in Settings.blacklist):
@@ -227,7 +239,7 @@ def altlink(url: str, alt: str):
return alt
try:
mirror_xml = ElementTree.fromstring(m.text)
meta_urls = {}
meta_urls: Dict[str, str] = {}
for f in mirror_xml.iter("{urn:ietf:params:xml:ns:metalink}file"):
for u in f.iter("{urn:ietf:params:xml:ns:metalink}url"):
meta_urls[u.attrib["priority"]] = u.text
@@ -239,21 +251,18 @@ def altlink(url: str, alt: str):
else:
# Return first priority item which is not blacklist in mirrors list,
# if not found then return alt in default
return next(
filter(
lambda mirror: not any(mirror.startswith(b) for b in Settings.blacklist),
mirrors,
),
alt,
)
try:
return next(mirror for mirror in mirrors if not any(mirror.startswith(b) for b in Settings.blacklist))
except StopIteration:
return alt
class MyQueueListener(QueueListener):
def __init__(self, queue):
handlers = []
handlers: List[Handler] = []
super().__init__(queue, *handlers)
def handle(self, record):
def handle(self, record) -> None:
"""
Handle a record from subprocess.
Override logger name then handle at proper logger.
@@ -264,7 +273,7 @@ class MyQueueListener(QueueListener):
logger.handle(record)
def ssplit(data: str):
def ssplit(data: str) -> Generator[str, None, None]:
for element in data.split(","):
yield element.strip()
@@ -284,9 +293,9 @@ def xml_to_modules(
parsed_xml = ElementTree.fromstring(xml_text)
except ElementTree.ParseError as perror:
raise ArchiveListError(f"Downloaded metadata is corrupted. {perror}") from perror
packages = {}
packages: Dict[str, Dict[str, str]] = {}
for packageupdate in parsed_xml.iter("PackageUpdate"):
if predicate and not predicate(packageupdate):
if not predicate(packageupdate):
continue
name = packageupdate.find("Name").text
packages[name] = {}
@@ -302,7 +311,7 @@ def xml_to_modules(
class MyConfigParser(configparser.ConfigParser):
def getlist(self, section: str, option: str, fallback=[]) -> List[str]:
def getlist(self, section: str, option: str, fallback: List[str] = []) -> List[str]:
value = self.get(section, option, fallback=None)
if value is None:
return fallback
@@ -312,7 +321,7 @@ class MyConfigParser(configparser.ConfigParser):
result = fallback
return result
def getlistint(self, section: str, option: str, fallback=[]):
def getlistint(self, section: str, option: str, fallback: List[int] = []) -> List[int]:
try:
result = [int(x) for x in self.getlist(section, option)]
except Exception:
@@ -324,15 +333,32 @@ class SettingsClass:
"""
Class to hold configuration and settings.
Actual values are stored in 'settings.ini' file.
It also holds a combinations database.
It also holds a `combinations` database.
"""
def __init__(self):
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")
# this class is Borg
_shared_state: Dict[str, Any] = {
"config": None,
"configfile": None,
"loggingconf": None,
"_combinations": None,
"_lock": threading.Lock(),
}
def load_settings(self, file=None):
def __new__(cls, *p, **k):
self = object.__new__(cls, *p, **k)
self.__dict__ = cls._shared_state
return self
def __init__(self):
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")
def load_settings(self, file: Optional[Union[str, TextIO]] = None) -> None:
with open(
os.path.join(os.path.dirname(__file__), "combinations.json"),
"r",
@@ -347,15 +373,11 @@ class SettingsClass:
else:
# passed through command line argparse.FileType("r")
self.config.read_file(file)
self.configfile = file
self.configfile = file.name
file.close()
else:
if isinstance(self.configfile, str):
with open(self.configfile, "r") as f:
self.config.read_file(f)
else:
self.configfile.seek(0)
self.config.read_file(self.configfile)
with open(self.configfile, "r") as f:
self.config.read_file(f)
@property
def qt_combinations(self):
@@ -445,6 +467,14 @@ class SettingsClass:
def max_retries_to_retrieve_hash(self):
return self.config.getint("requests", "max_retries_to_retrieve_hash", fallback=int(self.max_retries))
@property
def hash_algorithm(self):
return self.config.get("requests", "hash_algorithm", fallback="sha256")
@property
def ignore_hash(self):
return self.config.getboolean("requests", "INSECURE_NOT_FOR_PRODUCTION_ignore_hash", fallback=False)
@property
def backoff_factor(self):
return self.config.getfloat("requests", "retry_backoff", fallback=0.1)
@@ -485,6 +515,5 @@ Settings = SettingsClass()
def setup_logging(env_key="LOG_CFG"):
config = os.getenv(env_key, None)
if config is not None and os.path.exists(config):
logging.config.fileConfig(config)
else:
logging.config.fileConfig(Settings.loggingconf)
Settings.loggingconf = config
logging.config.fileConfig(Settings.loggingconf)

View File

@@ -22,6 +22,7 @@
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
import argparse
import errno
import gc
import multiprocessing
import os
@@ -30,15 +31,17 @@ import posixpath
import signal
import subprocess
import sys
import tarfile
import time
import zipfile
from logging import getLogger
from logging.handlers import QueueHandler
from pathlib import Path
from tempfile import TemporaryDirectory
from typing import List, Optional
from typing import List, Optional, Tuple, cast
import aqt
from aqt.archives import QtArchives, QtPackage, SrcDocExamplesArchives, ToolArchives
from aqt.archives import QtArchives, QtPackage, SrcDocExamplesArchives, TargetConfig, ToolArchives
from aqt.exceptions import (
AqtException,
ArchiveChecksumError,
@@ -47,6 +50,8 @@ from aqt.exceptions import (
ArchiveListError,
CliInputError,
CliKeyboardInterrupt,
DiskAccessNotPermitted,
OutOfDiskSpace,
OutOfMemory,
)
from aqt.helper import (
@@ -59,7 +64,7 @@ from aqt.helper import (
setup_logging,
)
from aqt.metadata import ArchiveId, MetadataFactory, QtRepoProperty, SimpleSpec, Version, show_list, suggested_follow_up
from aqt.updater import Notifier, Updater
from aqt.updater import Notifier, Updater, dir_for_version
try:
import py7zr
@@ -69,6 +74,75 @@ except ImportError:
EXT7Z = True
class BaseArgumentParser(argparse.ArgumentParser):
"""Global options and subcommand trick"""
config: Optional[str]
func: object
class ListArgumentParser(BaseArgumentParser):
"""List-* command parser arguments and options"""
arch: Optional[str]
archives: List[str]
extension: str
extensions: str
host: str
last_version: str
latest_version: bool
long: bool
long_modules: List[str]
modules: List[str]
qt_version_spec: str
spec: str
target: str
class ListToolArgumentParser(ListArgumentParser):
"""List-tool command options"""
tool_name: str
tool_version: str
class CommonInstallArgParser(BaseArgumentParser):
"""Install-*/install common arguments"""
is_legacy: bool
target: str
host: str
outputdir: Optional[str]
base: Optional[str]
timeout: Optional[float]
external: Optional[str]
internal: bool
keep: bool
archive_dest: Optional[str]
class InstallArgParser(CommonInstallArgParser):
"""Install-qt arguments and options"""
arch: Optional[str]
qt_version: str
qt_version_spec: str
modules: Optional[List[str]]
archives: Optional[List[str]]
noarchives: bool
autodesktop: bool
class InstallToolArgParser(CommonInstallArgParser):
"""Install-tool arguments and options"""
tool_name: str
version: Optional[str]
tool_variant: Optional[str]
class Cli:
"""CLI main class to parse command line argument and launch proper functions."""
@@ -121,7 +195,7 @@ class Cli:
f"Arguments: `{sys.argv}` Host: `{platform.uname()}`\n"
"===========================PLEASE FILE A BUG REPORT===========================\n"
"You have discovered a bug in aqt.\n"
"Please file a bug report at https://github.com/miurahr/aqtinstall/issues.\n"
"Please file a bug report at https://github.com/miurahr/aqtinstall/issues\n"
"Please remember to include a copy of this program's output in your report."
)
return Cli.UNHANDLED_EXCEPTION_CODE
@@ -144,21 +218,42 @@ class Cli:
def _check_qt_arg_version_offline(self, version):
return version in Settings.available_offline_installer_version
def _set_sevenzip(self, external):
sevenzip = external
if sevenzip is None:
return None
def _warning_unknown_qt_version(self, qt_version: str) -> str:
return self._warning_on_bad_combination(f'Qt version "{qt_version}"')
def _warning_unknown_target_arch_combo(self, args: List[str]) -> str:
return self._warning_on_bad_combination(f"target combination \"{' '.join(args)}\"")
def _warning_unexpected_modules(self, unexpected_modules: List[str]) -> str:
return self._warning_on_bad_combination(f"modules {unexpected_modules}")
def _warning_on_bad_combination(self, combo_message: str) -> str:
return (
f"Specified {combo_message} did not exist when this version of aqtinstall was released. "
"This may not install properly, but we will try our best."
)
def _set_sevenzip(self, external: Optional[str]) -> Optional[str]:
sevenzip = external
fallback = Settings.zipcmd
if sevenzip is None:
if EXT7Z:
self.logger.warning(f"The py7zr module failed to load. Falling back to '{fallback}' for .7z extraction.")
self.logger.warning("You can use the '--external | -E' flags to select your own extraction tool.")
sevenzip = fallback
else:
# Just use py7zr
return None
try:
subprocess.run(
[sevenzip, "--help"],
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL,
)
return sevenzip
except FileNotFoundError as e:
raise CliInputError("Specified 7zip command executable does not exist: {!r}".format(sevenzip)) from e
return sevenzip
qualifier = "Specified" if sevenzip == external else "Fallback"
raise CliInputError(f"{qualifier} 7zip command executable does not exist: '{sevenzip}'") from e
@staticmethod
def _set_arch(arch: Optional[str], os_name: str, target: str, qt_version_or_spec: str) -> str:
@@ -188,13 +283,10 @@ class Cli:
return False
return True
def _check_modules_arg(self, qt_version, modules):
if modules is None:
return True
def _select_unexpected_modules(self, qt_version: str, modules: Optional[List[str]]) -> List[str]:
"""Returns a sorted list of all the requested modules that do not exist in the combinations.json file."""
available = Settings.available_modules(qt_version)
if available is None:
return False
return all([m in available for m in modules])
return sorted(set(modules or []) - set(available or []))
@staticmethod
def _determine_qt_version(
@@ -207,7 +299,8 @@ class Cli:
def opt_version_for_spec(ext: str, _spec: SimpleSpec) -> Optional[Version]:
try:
return MetadataFactory(ArchiveId("qt", host, target, ext), spec=_spec, base_url=base_url).getList().latest()
meta = MetadataFactory(ArchiveId("qt", host, target), spec=_spec, base_url=base_url)
return meta.fetch_latest_version(ext)
except AqtException:
return None
@@ -248,7 +341,7 @@ class Cli:
dest.mkdir(parents=True, exist_ok=True)
return dest
def run_install_qt(self, args):
def run_install_qt(self, args: InstallArgParser):
"""Run install subcommand"""
start_time = time.perf_counter()
self.show_aqt_version()
@@ -256,9 +349,8 @@ class Cli:
self._warn_on_deprecated_command("install", "install-qt")
target: str = args.target
os_name: str = args.host
arch: str = self._set_arch(
args.arch, os_name, target, getattr(args, "qt_version", getattr(args, "qt_version_spec", None))
)
qt_version_or_spec: str = getattr(args, "qt_version", getattr(args, "qt_version_spec", ""))
arch: str = self._set_arch(args.arch, os_name, target, qt_version_or_spec)
keep: bool = args.keep or Settings.always_keep_archives
archive_dest: Optional[str] = args.archive_dest
output_dir = args.outputdir
@@ -272,9 +364,6 @@ class Cli:
timeout = (Settings.connection_timeout, Settings.response_timeout)
modules = args.modules
sevenzip = self._set_sevenzip(args.external)
if EXT7Z and sevenzip is None:
# override when py7zr is not exist
sevenzip = self._set_sevenzip("7z")
if args.base is not None:
if not self._check_mirror(args.base):
raise CliInputError(
@@ -287,7 +376,7 @@ class Cli:
if hasattr(args, "qt_version_spec"):
qt_version: str = str(Cli._determine_qt_version(args.qt_version_spec, os_name, target, arch, base_url=base))
else:
qt_version: str = args.qt_version
qt_version = args.qt_version
Cli._validate_version_str(qt_version)
archives = args.archives
if args.noarchives:
@@ -297,19 +386,38 @@ class Cli:
raise CliInputError("Options `--archives` and `--noarchives` are mutually exclusive.")
else:
if modules is not None and archives is not None:
archives.append(modules)
archives.extend(modules)
nopatch = args.noarchives or (archives is not None and "qtbase" not in archives) # type: bool
if not self._check_qt_arg_versions(qt_version):
self.logger.warning("Specified Qt version is unknown: {}.".format(qt_version))
if not self._check_qt_arg_combination(qt_version, os_name, target, arch):
self.logger.warning(
"Specified target combination is not valid or unknown: {} {} {}".format(os_name, target, arch)
)
all_extra = True if modules is not None and "all" in modules else False
if not all_extra and not self._check_modules_arg(qt_version, modules):
self.logger.warning("Some of specified modules are unknown.")
should_autoinstall: bool = args.autodesktop
_version = Version(qt_version)
base_path = Path(base_dir)
qt_archives = retry_on_bad_connection(
expect_desktop_archdir, autodesk_arch = self._get_autodesktop_dir_and_arch(
should_autoinstall, os_name, target, base_path, _version, arch
)
def get_auto_desktop_archives() -> List[QtPackage]:
def to_archives(baseurl: str) -> QtArchives:
return QtArchives(os_name, "desktop", qt_version, cast(str, autodesk_arch), base=baseurl, timeout=timeout)
if autodesk_arch is not None:
return cast(QtArchives, retry_on_bad_connection(to_archives, base)).archives
else:
return []
auto_desktop_archives: List[QtPackage] = get_auto_desktop_archives()
if not self._check_qt_arg_versions(qt_version):
self.logger.warning(self._warning_unknown_qt_version(qt_version))
if not self._check_qt_arg_combination(qt_version, os_name, target, arch):
self.logger.warning(self._warning_unknown_target_arch_combo([os_name, target, arch]))
all_extra = True if modules is not None and "all" in modules else False
if not all_extra:
unexpected_modules = self._select_unexpected_modules(qt_version, modules)
if unexpected_modules:
self.logger.warning(self._warning_unexpected_modules(unexpected_modules))
qt_archives: QtArchives = retry_on_bad_connection(
lambda base_url: QtArchives(
os_name,
target,
@@ -324,23 +432,28 @@ class Cli:
),
base,
)
qt_archives.archives.extend(auto_desktop_archives)
target_config = qt_archives.get_target_config()
with TemporaryDirectory() as temp_dir:
_archive_dest = Cli.choose_archive_dest(archive_dest, keep, temp_dir)
run_installer(qt_archives.get_packages(), base_dir, sevenzip, keep, _archive_dest)
if not nopatch:
Updater.update(target_config, base_dir)
Updater.update(target_config, base_path, expect_desktop_archdir)
if autodesk_arch is not None:
d_target_config = TargetConfig(str(_version), "desktop", autodesk_arch, os_name)
Updater.update(d_target_config, base_path, expect_desktop_archdir)
Notifier.notify_sdk(target_config, base_dir)
self.logger.info("Finished installation")
self.logger.info("Time elapsed: {time:.8f} second".format(time=time.perf_counter() - start_time))
def _run_src_doc_examples(self, flavor, args, cmd_name: Optional[str] = None):
if not cmd_name:
cmd_name = flavor
self.show_aqt_version()
if args.is_legacy:
self._warn_on_deprecated_command(old_name=cmd_name, new_name=f"install-{cmd_name}")
if cmd_name is None:
self._warn_on_deprecated_command(old_name=flavor, new_name=f"install-{flavor}")
else:
self._warn_on_deprecated_command(old_name=cmd_name, new_name=f"install-{cmd_name}")
elif getattr(args, "target", None) is not None:
self._warn_on_deprecated_parameter("target", args.target)
target = "desktop" # The only valid target for src/doc/examples is "desktop"
@@ -366,14 +479,11 @@ class Cli:
else:
timeout = (Settings.connection_timeout, Settings.response_timeout)
sevenzip = self._set_sevenzip(args.external)
if EXT7Z and sevenzip is None:
# override when py7zr is not exist
sevenzip = self._set_sevenzip(Settings.zipcmd)
modules = getattr(args, "modules", None) # `--modules` is invalid for `install-src`
archives = args.archives
all_extra = True if modules is not None and "all" in modules else False
if not self._check_qt_arg_versions(qt_version):
self.logger.warning("Specified Qt version is unknown: {}.".format(qt_version))
self.logger.warning(self._warning_unknown_qt_version(qt_version))
srcdocexamples_archives: SrcDocExamplesArchives = retry_on_bad_connection(
lambda base_url: SrcDocExamplesArchives(
@@ -425,7 +535,7 @@ class Cli:
self._run_src_doc_examples("doc", args)
self.logger.info("Time elapsed: {time:.8f} second".format(time=time.perf_counter() - start_time))
def run_install_tool(self, args):
def run_install_tool(self, args: InstallToolArgParser):
"""Run tool subcommand"""
start_time = time.perf_counter()
self.show_aqt_version()
@@ -440,9 +550,6 @@ class Cli:
else:
base_dir = output_dir
sevenzip = self._set_sevenzip(args.external)
if EXT7Z and sevenzip is None:
# override when py7zr is not exist
sevenzip = self._set_sevenzip(Settings.zipcmd)
version = getattr(args, "version", None)
if version is not None:
Cli._validate_version_str(version, allow_minus=True)
@@ -457,10 +564,10 @@ class Cli:
else:
timeout = (Settings.connection_timeout, Settings.response_timeout)
if args.tool_variant is None:
archive_id = ArchiveId("tools", os_name, target, "")
archive_id = ArchiveId("tools", os_name, target)
meta = MetadataFactory(archive_id, base_url=base, is_latest_version=True, tool_name=tool_name)
try:
archs = meta.getList()
archs: List[str] = cast(list, meta.getList())
except ArchiveDownloadError as e:
msg = f"Failed to locate XML data for the tool '{tool_name}'."
raise ArchiveListError(msg, suggested_action=suggested_follow_up(meta)) from e
@@ -470,7 +577,7 @@ class Cli:
for arch in archs:
if not self._check_tools_arg_combination(os_name, tool_name, arch):
self.logger.warning("Specified target combination is not valid: {} {} {}".format(os_name, tool_name, arch))
self.logger.warning(self._warning_unknown_target_arch_combo([os_name, tool_name, arch]))
tool_archives: ToolArchives = retry_on_bad_connection(
lambda base_url: ToolArchives(
@@ -490,22 +597,38 @@ class Cli:
self.logger.info("Finished installation")
self.logger.info("Time elapsed: {time:.8f} second".format(time=time.perf_counter() - start_time))
def run_list_qt(self, args: argparse.ArgumentParser):
def run_list_qt(self, args: ListArgumentParser):
"""Print versions of Qt, extensions, modules, architectures"""
if args.extensions:
self._warn_on_deprecated_parameter("extensions", args.extensions)
self.logger.warning(
"The '--extensions' flag will always return an empty list, "
"because there are no useful arguments for the '--extension' flag."
)
print("")
return
if args.extension:
self._warn_on_deprecated_parameter("extension", args.extension)
self.logger.warning("The '--extension' flag will be ignored.")
if not args.target:
print(" ".join(ArchiveId.TARGETS_FOR_HOST[args.host]))
return
if args.target not in ArchiveId.TARGETS_FOR_HOST[args.host]:
raise CliInputError("'{0.target}' is not a valid target for host '{0.host}'".format(args))
if args.modules:
modules_ver, modules_query, is_long = args.modules[0], tuple(args.modules), False
assert len(args.modules) == 2, "broken argument parser for list-qt"
modules_query = MetadataFactory.ModulesQuery(args.modules[0], args.modules[1])
modules_ver, is_long = args.modules[0], False
elif args.long_modules:
modules_ver, modules_query, is_long = args.long_modules[0], tuple(args.long_modules), True
assert args.long_modules and len(args.long_modules) == 2, "broken argument parser for list-qt"
modules_query = MetadataFactory.ModulesQuery(args.long_modules[0], args.long_modules[1])
modules_ver, is_long = args.long_modules[0], True
else:
modules_ver, modules_query, is_long = None, None, False
for version_str in (modules_ver, args.extensions, args.arch, args.archives[0] if args.archives else None):
for version_str in (modules_ver, args.arch, args.archives[0] if args.archives else None):
Cli._validate_version_str(version_str, allow_latest=True, allow_empty=True)
spec = None
@@ -516,23 +639,17 @@ class Cli:
raise CliInputError(f"Invalid version specification: '{args.spec}'.\n" + SimpleSpec.usage()) from e
meta = MetadataFactory(
archive_id=ArchiveId(
"qt",
args.host,
args.target,
args.extension if args.extension else "",
),
archive_id=ArchiveId("qt", args.host, args.target),
spec=spec,
is_latest_version=args.latest_version,
modules_query=modules_query,
is_long_listing=is_long,
extensions_ver=args.extensions,
architectures_ver=args.arch,
archives_query=args.archives,
)
show_list(meta)
def run_list_tool(self, args: argparse.ArgumentParser):
def run_list_tool(self, args: ListToolArgumentParser):
"""Print tools"""
if not args.target:
@@ -548,13 +665,13 @@ class Cli:
)
show_list(meta)
def run_list_src_doc_examples(self, args: argparse.ArgumentParser, cmd_type: str):
def run_list_src_doc_examples(self, args: ListArgumentParser, cmd_type: str):
target = "desktop" # The only valid target for src/doc/examples is "desktop"
version = Cli._determine_qt_version(args.qt_version_spec, args.host, target, arch="")
is_fetch_modules: bool = getattr(args, "modules", False)
meta = MetadataFactory(
archive_id=ArchiveId("qt", args.host, target, "src_doc_examples"),
src_doc_examples_query=(cmd_type, version, is_fetch_modules),
archive_id=ArchiveId("qt", args.host, target),
src_doc_examples_query=MetadataFactory.SrcDocExamplesQuery(cmd_type, version, is_fetch_modules),
)
show_list(meta)
@@ -604,6 +721,13 @@ class Cli:
action="store_true",
help="No base packages; allow mod amendment with --modules option.",
)
install_qt_parser.add_argument(
"--autodesktop",
action="store_true",
help="For Qt6 android, ios, wasm, and msvc_arm64 installations, an additional desktop Qt installation is "
"required. When enabled, this option installs the required desktop version automatically. "
"It has no effect when the desktop installation is not required.",
)
def _set_install_tool_parser(self, install_tool_parser, *, is_legacy: bool):
install_tool_parser.set_defaults(func=self.run_install_tool, is_legacy=is_legacy)
@@ -628,7 +752,7 @@ class Cli:
)
self._set_common_options(install_tool_parser)
def _warn_on_deprecated_command(self, old_name: str, new_name: str):
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"
f"In the future, please use the command '{new_name}' instead."
@@ -641,7 +765,7 @@ class Cli:
f"In the future, please omit this parameter."
)
def _make_all_parsers(self, subparsers: argparse._SubParsersAction):
def _make_all_parsers(self, subparsers: argparse._SubParsersAction) -> None:
deprecated_msg = "This command is deprecated and marked for removal in a future version of aqt."
def make_parser_it(cmd: str, desc: str, is_legacy: bool, set_parser_cmd, formatter_class):
@@ -697,18 +821,16 @@ class Cli:
def _make_list_qt_parser(self, subparsers: argparse._SubParsersAction):
"""Creates a subparser that works with the MetadataFactory, and adds it to the `subparsers` parameter"""
list_parser: argparse.ArgumentParser = subparsers.add_parser(
list_parser: ListArgumentParser = subparsers.add_parser(
"list-qt",
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog="Examples:\n"
"$ aqt list-qt mac # print all targets for Mac OS\n"
"$ aqt list-qt mac desktop # print all versions of Qt 5\n"
"$ aqt list-qt mac desktop --extension wasm # print all wasm versions of Qt 5\n"
'$ aqt list-qt mac desktop --spec "5.9" # print all versions of Qt 5.9\n'
'$ aqt list-qt mac desktop --spec "5.9" --latest-version # print latest Qt 5.9\n'
"$ aqt list-qt mac desktop --modules 5.12.0 clang_64 # print modules for 5.12.0\n"
"$ aqt list-qt mac desktop --spec 5.9 --modules latest clang_64 # print modules for latest 5.9\n"
"$ aqt list-qt mac desktop --extensions 5.9.0 # print choices for --extension flag\n"
"$ aqt list-qt mac desktop --arch 5.9.9 # print architectures for 5.9.9/mac/desktop\n"
"$ aqt list-qt mac desktop --arch latest # print architectures for the latest Qt 5\n"
"$ aqt list-qt mac desktop --archives 5.9.0 clang_64 # list archives in base Qt installation\n"
@@ -725,8 +847,7 @@ class Cli:
list_parser.add_argument(
"--extension",
choices=ArchiveId.ALL_EXTENSIONS,
help="Extension of packages to list. "
"Use the `--extensions` flag to list all relevant options for a host/target.",
help="Deprecated since aqt v3.1.0. Use of this flag will emit a warning, but will otherwise be ignored.",
)
list_parser.add_argument(
"--spec",
@@ -759,9 +880,8 @@ class Cli:
"--extensions",
type=str,
metavar="(VERSION | latest)",
help='Qt version in the format of "5.X.Y", or the keyword "latest". '
"When set, this prints all valid arguments for the `--extension` flag "
"for either Qt 5.X.Y or the latest version of Qt.",
help="Deprecated since v3.1.0. Prints a list of valid arguments for the '--extension' flag. "
"Since the '--extension' flag is now deprecated, this will always print an empty list.",
)
output_modifier_exclusive_group.add_argument(
"--arch",
@@ -790,15 +910,15 @@ class Cli:
def _make_list_tool_parser(self, subparsers: argparse._SubParsersAction):
"""Creates a subparser that works with the MetadataFactory, and adds it to the `subparsers` parameter"""
list_parser: argparse.ArgumentParser = subparsers.add_parser(
list_parser: ListArgumentParser = subparsers.add_parser(
"list-tool",
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog="Examples:\n"
"$ aqt list-tool mac desktop # print all tools for mac desktop\n"
"$ aqt list-tool mac desktop tools_ifw # print all tool variant names for QtIFW\n"
"$ aqt list-tool mac desktop ifw # print all tool variant names for QtIFW\n"
"$ aqt list-tool mac desktop -l tools_ifw # print tool variant names with metadata for QtIFW\n"
"$ aqt list-tool mac desktop -l ifw # print tool variant names with metadata for QtIFW\n",
"$ aqt list-tool mac desktop # print all tools for mac desktop\n"
"$ aqt list-tool mac desktop tools_ifw # print all tool variant names for QtIFW\n"
"$ aqt list-tool mac desktop ifw # print all tool variant names for QtIFW\n"
"$ aqt list-tool mac desktop tools_ifw --long # print tool variant names with metadata for QtIFW\n"
"$ aqt list-tool mac desktop ifw --long # print tool variant names with metadata for QtIFW\n",
)
list_parser.add_argument("host", choices=["linux", "mac", "windows"], help="host os name")
list_parser.add_argument(
@@ -922,7 +1042,7 @@ class Cli:
@staticmethod
def _validate_version_str(
version_str: str, *, allow_latest: bool = False, allow_empty: bool = False, allow_minus: bool = False
version_str: Optional[str], *, allow_latest: bool = False, allow_empty: bool = False, allow_minus: bool = False
) -> None:
"""
Raise CliInputError if the version is not an acceptable Version.
@@ -933,8 +1053,13 @@ class Cli:
:param allow_minus: If true, everything after the first '-' in the version will be ignored.
This allows acceptance of versions like "1.2.3-0-202101020304"
"""
if (allow_latest and version_str == "latest") or (allow_empty and not version_str):
if allow_latest and version_str == "latest":
return
if not version_str:
if allow_empty:
return
else:
raise CliInputError("Invalid empty version! Please use the form '5.X.Y'.")
try:
if "-" in version_str and allow_minus:
version_str = version_str[: version_str.find("-")]
@@ -942,6 +1067,50 @@ class Cli:
except ValueError as e:
raise CliInputError(f"Invalid version: '{version_str}'! Please use the form '5.X.Y'.") from e
def _get_autodesktop_dir_and_arch(
self, should_autoinstall: bool, host: str, target: str, base_path: Path, version: Version, arch: str
) -> Tuple[Optional[str], Optional[str]]:
"""Returns expected_desktop_arch_dir, desktop_arch_to_install"""
is_wasm = arch.startswith("wasm")
is_msvc = "msvc" in arch
is_win_desktop_msvc_arm64 = host == "windows" and target == "desktop" and is_msvc and arch.endswith("arm64")
if version < Version("6.0.0") or (
target not in ["ios", "android"] and not is_wasm and not is_win_desktop_msvc_arm64
):
# We only need to worry about the desktop directory for Qt6 mobile or wasm installs.
return None, None
installed_desktop_arch_dir = QtRepoProperty.find_installed_desktop_qt_dir(host, base_path, version, is_msvc=is_msvc)
if installed_desktop_arch_dir:
# An acceptable desktop Qt is already installed, so don't do anything.
self.logger.info(f"Found installed {host}-desktop Qt at {installed_desktop_arch_dir}")
return installed_desktop_arch_dir.name, None
default_desktop_arch = MetadataFactory(ArchiveId("qt", host, "desktop")).fetch_default_desktop_arch(version, is_msvc)
desktop_arch_dir = QtRepoProperty.get_arch_dir_name(host, default_desktop_arch, version)
expected_desktop_arch_path = base_path / dir_for_version(version) / desktop_arch_dir
if is_win_desktop_msvc_arm64:
qt_type = "MSVC Arm64"
elif is_wasm:
qt_type = "Qt6-WASM"
else:
qt_type = target
if should_autoinstall:
# No desktop Qt is installed, but the user has requested installation. Find out what to install.
self.logger.info(
f"You are installing the {qt_type} version of Qt, which requires that the desktop version of Qt "
f"is also installed. Now installing Qt: desktop {version} {default_desktop_arch}"
)
return expected_desktop_arch_path.name, default_desktop_arch
else:
self.logger.warning(
f"You are installing the {qt_type} version of Qt, which requires that the desktop version of Qt "
f"is also installed. You can install it with the following command:\n"
f" `aqt install-qt {host} desktop {version} {default_desktop_arch}`"
)
return expected_desktop_arch_path.name, None
def is_64bit() -> bool:
"""check if running platform is 64bit python."""
@@ -955,7 +1124,7 @@ def run_installer(archives: List[QtPackage], base_dir: str, sevenzip: Optional[s
#
tasks = []
for arc in archives:
tasks.append((arc, base_dir, sevenzip, queue, archive_dest, keep))
tasks.append((arc, base_dir, sevenzip, queue, archive_dest, Settings.configfile, keep))
ctx = multiprocessing.get_context("spawn")
if is_64bit():
pool = ctx.Pool(Settings.concurrency, init_worker_sh, (), 4)
@@ -972,6 +1141,23 @@ def run_installer(archives: List[QtPackage], base_dir: str, sevenzip: Optional[s
pool.starmap(installer, tasks)
pool.close()
pool.join()
except PermissionError as e: # subclass of OSError
close_worker_pool_on_exception(e)
raise DiskAccessNotPermitted(
f"Failed to write to base directory at {base_dir}",
suggested_action=[
"Check that the destination is writable and does not already contain files owned by another user."
],
) from e
except OSError as e:
close_worker_pool_on_exception(e)
if e.errno == errno.ENOSPC:
raise OutOfDiskSpace(
"Insufficient disk space to complete installation.",
suggested_action=["Check available disk space.", "Check size requirements for installation."],
) from e
else:
raise
except KeyboardInterrupt as e:
close_worker_pool_on_exception(e)
raise CliKeyboardInterrupt("Installer halted by keyboard interrupt.") from e
@@ -1010,8 +1196,8 @@ def installer(
command: Optional[str],
queue: multiprocessing.Queue,
archive_dest: Path,
keep: bool = False,
response_timeout: Optional[int] = None,
settings_ini: str,
keep: bool,
):
"""
Installer function to download archive files and extract it.
@@ -1021,10 +1207,9 @@ def installer(
base_url = qt_package.base_url
archive: Path = archive_dest / qt_package.archive
start_time = time.perf_counter()
# set defaults
Settings.load_settings()
# set logging
setup_logging() # XXX: why need to load again?
Settings.load_settings(file=settings_ini)
# setup queue logger
setup_logging()
qh = QueueHandler(queue)
logger = getLogger()
for handler in logger.handlers:
@@ -1032,16 +1217,13 @@ def installer(
logger.removeHandler(handler)
logger.addHandler(qh)
#
if response_timeout is None:
timeout = (Settings.connection_timeout, Settings.response_timeout)
else:
timeout = (Settings.connection_timeout, response_timeout)
hash = get_hash(qt_package.archive_path, algorithm="sha256", timeout=timeout)
timeout = (Settings.connection_timeout, Settings.response_timeout)
hash = get_hash(qt_package.archive_path, Settings.hash_algorithm, timeout) if not Settings.ignore_hash else None
def download_bin(_base_url):
url = posixpath.join(_base_url, qt_package.archive_path)
logger.debug("Download URL: {}".format(url))
return downloadBinaryFile(url, archive, "sha256", hash, timeout)
return downloadBinaryFile(url, archive, Settings.hash_algorithm, hash, timeout)
retry_on_errors(
action=lambda: retry_on_bad_connection(download_bin, base_url),
@@ -1050,22 +1232,23 @@ def installer(
name=f"Downloading {name}",
)
gc.collect()
if command is None:
if tarfile.is_tarfile(archive):
with tarfile.open(archive) as tar_archive:
if hasattr(tarfile, "data_filter"):
tar_archive.extractall(filter="tar", path=base_dir)
else:
# remove this when the minimum Python version is 3.12
logger.warning("Extracting may be unsafe; consider updating Python to 3.11.4 or greater")
tar_archive.extractall(path=base_dir)
elif zipfile.is_zipfile(archive):
with zipfile.ZipFile(archive) as zip_archive:
zip_archive.extractall(path=base_dir)
elif command is None:
with py7zr.SevenZipFile(archive, "r") as szf:
szf.extractall(path=base_dir)
else:
if base_dir is not None:
command_args = [
command,
"x",
"-aoa",
"-bd",
"-y",
"-o{}".format(base_dir),
str(archive),
]
else:
command_args = [command, "x", "-aoa", "-bd", "-y", str(archive)]
command_args = [command, "x", "-aoa", "-bd", "-y", "-o{}".format(base_dir), str(archive)]
try:
proc = subprocess.run(command_args, stdout=subprocess.PIPE, check=True)
logger.debug(proc.stdout)

View File

@@ -25,8 +25,10 @@ import re
import secrets as random
import shutil
from abc import ABC, abstractmethod
from functools import reduce
from logging import getLogger
from typing import Callable, Dict, Generator, Iterable, Iterator, List, Optional, Tuple, Union
from pathlib import Path
from typing import Callable, Dict, Generator, Iterable, Iterator, List, NamedTuple, Optional, Set, Tuple, Union, cast
from urllib.parse import ParseResult, urlparse
from xml.etree.ElementTree import Element
@@ -133,11 +135,11 @@ class Versions:
versions: Union[None, Version, Iterable[Tuple[int, Iterable[Version]]]],
):
if versions is None:
self.versions = list()
self.versions: List[List[Version]] = list()
elif isinstance(versions, Version):
self.versions = [[versions]]
else:
self.versions: List[List[Version]] = [list(versions_iterator) for _, versions_iterator in versions]
self.versions = [list(versions_iterator) for _, versions_iterator in versions]
def __str__(self) -> str:
return str(self.versions)
@@ -203,34 +205,22 @@ class ArchiveId:
"mac": ["android", "desktop", "ios"],
"linux": ["android", "desktop"],
}
ALL_EXTENSIONS = (
"wasm",
"src_doc_examples",
"preview",
"wasm_preview",
"x86_64",
"x86",
"armv7",
"arm64_v8a",
)
EXTENSIONS_REQUIRED_ANDROID_QT6 = "x86_64", "x86", "armv7", "arm64_v8a"
EXTENSIONS_REQUIRED_ANDROID_QT6 = {"x86_64", "x86", "armv7", "arm64_v8a"}
ALL_EXTENSIONS = {"", "wasm", "src_doc_examples", *EXTENSIONS_REQUIRED_ANDROID_QT6}
def __init__(self, category: str, host: str, target: str, extension: str = ""):
def __init__(self, category: str, host: str, target: str):
if category not in ArchiveId.CATEGORIES:
raise ValueError("Category '{}' is invalid".format(category))
if host not in ArchiveId.HOSTS:
raise ValueError("Host '{}' is invalid".format(host))
if target not in ArchiveId.TARGETS_FOR_HOST[host]:
raise ValueError("Target '{}' is invalid".format(target))
if extension and extension not in ArchiveId.ALL_EXTENSIONS:
raise ValueError("Extension '{}' is invalid".format(extension))
self.category: str = category
self.host: str = host
self.target: str = target
self.extension: str = extension
def is_preview(self) -> bool:
return "preview" in self.extension if self.extension else False
return False
def is_qt(self) -> bool:
return self.category == "qt"
@@ -238,10 +228,6 @@ class ArchiveId:
def is_tools(self) -> bool:
return self.category == "tools"
def is_no_arch(self) -> bool:
"""Returns True if there should be no arch attached to the module names"""
return self.extension in ("src_doc_examples",)
def to_url(self) -> str:
return "online/qtsdkrepository/{os}{arch}/{target}/".format(
os=self.host,
@@ -249,20 +235,29 @@ class ArchiveId:
target=self.target,
)
def to_folder(self, qt_version_no_dots: str) -> str:
def to_folder(self, qt_version_no_dots: str, extension: Optional[str] = None) -> str:
return "{category}{major}_{ver}{ext}".format(
category=self.category,
major=qt_version_no_dots[0],
ver=qt_version_no_dots,
ext="_" + self.extension if self.extension else "",
ext="_" + extension if extension else "",
)
def all_extensions(self, version: Version) -> List[str]:
if self.target == "desktop" and QtRepoProperty.is_in_wasm_range(self.host, version):
return ["", "wasm"]
elif self.target == "desktop" and QtRepoProperty.is_in_wasm_threaded_range(version):
return ["", "wasm_singlethread", "wasm_multithread"]
elif self.target == "android" and version >= Version("6.0.0"):
return list(ArchiveId.EXTENSIONS_REQUIRED_ANDROID_QT6)
else:
return [""]
def __str__(self) -> str:
return "{cat}/{host}/{target}{ext}".format(
return "{cat}/{host}/{target}".format(
cat=self.category,
host=self.host,
target=self.target,
ext="" if not self.extension else "/" + self.extension,
)
@@ -327,7 +322,7 @@ class TableMetadata(ABC):
heading = [self.name_heading, *[self.map_key_to_heading(key) for key in heading_keys]]
table.header(heading)
table.add_rows(self._rows(heading_keys), header=False)
return table.draw()
return cast(str, table.draw())
def __bool__(self):
return bool(self.table_data)
@@ -374,10 +369,48 @@ class QtRepoProperty:
Intended to help decouple the logic of aqt from specific properties of the Qt repository.
"""
@staticmethod
def dir_for_version(ver: Version) -> str:
return "5.9" if ver == Version("5.9.0") else f"{ver.major}.{ver.minor}.{ver.patch}"
@staticmethod
def get_arch_dir_name(host: str, arch: str, version: Version) -> str:
if arch.startswith("win64_mingw"):
return arch[6:] + "_64"
elif arch.startswith("win32_mingw"):
return arch[6:] + "_32"
elif arch.startswith("win"):
m = re.match(r"win\d{2}_(?P<msvc>msvc\d{4})_(?P<winrt>winrt_x\d{2})", arch)
if m:
return f"{m.group('winrt')}_{m.group('msvc')}"
else:
return arch[6:]
elif host == "mac" and arch == "clang_64":
return QtRepoProperty.default_mac_desktop_arch_dir(version)
else:
return arch
@staticmethod
def default_linux_desktop_arch_dir() -> str:
return "gcc_64"
@staticmethod
def default_win_msvc_desktop_arch_dir(_version: Version) -> str:
"""_version is unused, but we expect it to matter for future releases"""
return "msvc2019_64"
@staticmethod
def default_mac_desktop_arch_dir(version: Version) -> str:
return "macos" if version in SimpleSpec(">=6.1.2") else "clang_64"
@staticmethod
def extension_for_arch(architecture: str, is_version_ge_6: bool) -> str:
if architecture == "wasm_32":
return "wasm"
elif architecture == "wasm_singlethread":
return "wasm_singlethread"
elif architecture == "wasm_multithread":
return "wasm_multithread"
elif architecture.startswith("android_") and is_version_ge_6:
ext = architecture[len("android_") :]
if ext in ArchiveId.EXTENSIONS_REQUIRED_ANDROID_QT6:
@@ -395,22 +428,106 @@ class QtRepoProperty:
return [ext_lt_6]
return [ext_lt_6, ext_ge_6]
# Architecture, as reported in Updates.xml
MINGW_ARCH_PATTERN = re.compile(r"^win(?P<bits>\d+)_mingw(?P<version>\d+)?$")
# Directory that corresponds to an architecture
MINGW_DIR_PATTERN = re.compile(r"^mingw(?P<version>\d+)?_(?P<bits>\d+)$")
@staticmethod
def select_default_mingw(mingw_arches: List[str], is_dir: bool) -> Optional[str]:
"""
Selects a default architecture from a non-empty list of mingw architectures, matching the pattern
MetadataFactory.MINGW_ARCH_PATTERN. Meant to be called on a list of installed mingw architectures,
or a list of architectures available for installation.
"""
ArchBitsVer = Tuple[str, int, Optional[int]]
pattern = QtRepoProperty.MINGW_DIR_PATTERN if is_dir else QtRepoProperty.MINGW_ARCH_PATTERN
def mingw_arch_with_bits_and_version(arch: str) -> Optional[ArchBitsVer]:
match = pattern.match(arch)
if not match:
return None
bits = int(match.group("bits"))
ver = None if not match.group("version") else int(match.group("version"))
return arch, bits, ver
def select_superior_arch(lhs: ArchBitsVer, rhs: ArchBitsVer) -> ArchBitsVer:
_, l_bits, l_ver = lhs
_, r_bits, r_ver = rhs
if l_bits != r_bits:
return lhs if l_bits > r_bits else rhs
elif r_ver is None:
return lhs
elif l_ver is None:
return rhs
return lhs if l_ver > r_ver else rhs
candidates: List[ArchBitsVer] = list(filter(None, map(mingw_arch_with_bits_and_version, mingw_arches)))
if len(candidates) == 0:
return None
default_arch, _, _ = reduce(select_superior_arch, candidates)
return default_arch
@staticmethod
def find_installed_desktop_qt_dir(host: str, base_path: Path, version: Version, is_msvc: bool = False) -> Optional[Path]:
"""
Locates the default installed desktop qt directory, somewhere in base_path.
"""
installed_qt_version_dir = base_path / QtRepoProperty.dir_for_version(version)
if host == "mac":
arch_path = installed_qt_version_dir / QtRepoProperty.default_mac_desktop_arch_dir(version)
return arch_path if (arch_path / "bin/qmake").is_file() else None
elif host == "linux":
arch_path = installed_qt_version_dir / QtRepoProperty.default_linux_desktop_arch_dir()
return arch_path if (arch_path / "bin/qmake").is_file() else None
elif host == "windows" and is_msvc:
arch_path = installed_qt_version_dir / QtRepoProperty.default_win_msvc_desktop_arch_dir(version)
return arch_path if (arch_path / "bin/qmake.exe").is_file() else None
def contains_qmake_exe(arch_path: Path) -> bool:
return (arch_path / "bin/qmake.exe").is_file()
paths = [d for d in installed_qt_version_dir.glob("mingw*")]
directories = list(filter(contains_qmake_exe, paths))
arch_dirs = [d.name for d in directories]
selected_dir = QtRepoProperty.select_default_mingw(arch_dirs, is_dir=True)
return installed_qt_version_dir / selected_dir if selected_dir else None
@staticmethod
def is_in_wasm_range(host: str, version: Version) -> bool:
return (
version in SimpleSpec(">=6.2.0,<6.5.0")
or (host == "linux" and version in SimpleSpec(">=5.13,<6"))
or version in SimpleSpec(">=5.13.1,<6")
)
@staticmethod
def is_in_wasm_threaded_range(version: Version) -> bool:
return version in SimpleSpec(">=6.5.0")
class MetadataFactory:
"""Retrieve metadata of Qt variations, versions, and descriptions from Qt site."""
Metadata = Union[List[str], Versions, ToolData, ModuleData]
Action = Callable[[], Metadata]
SrcDocExamplesQuery = NamedTuple(
"SrcDocExamplesQuery", [("cmd_type", str), ("version", Version), ("is_modules_query", bool)]
)
ModulesQuery = NamedTuple("ModulesQuery", [("version_str", str), ("arch", str)])
def __init__(
self,
archive_id: ArchiveId,
*,
base_url: str = Settings.baseurl,
base_url: Optional[str] = None,
spec: Optional[SimpleSpec] = None,
is_latest_version: bool = False,
modules_query: Optional[Tuple[str, str]] = None,
extensions_ver: Optional[str] = None,
modules_query: Optional[ModulesQuery] = None,
architectures_ver: Optional[str] = None,
archives_query: Optional[List[str]] = None,
src_doc_examples_query: Optional[Tuple[str, Version, bool]] = None,
src_doc_examples_query: Optional[SrcDocExamplesQuery] = None,
tool_name: Optional[str] = None,
is_long_listing: bool = False,
):
@@ -422,7 +539,6 @@ class MetadataFactory:
:param is_latest_version: When True, the MetadataFactory will find all versions of Qt
matching filters, and only print the most recent version
:param modules_query: [Version of Qt, architecture] for which to list modules
:param extensions_ver: Version of Qt for which to list extensions
:param architectures_ver: Version of Qt for which to list architectures
:param archives_query: [Qt_Version, architecture, *module_names]: used to print list of archives
:param tool_name: Name of a tool, without architecture, ie "tools_qtcreator" or "tools_ifw"
@@ -431,102 +547,99 @@ class MetadataFactory:
self.logger = getLogger("aqt.metadata")
self.archive_id = archive_id
self.spec = spec
self.base_url = base_url
self.base_url = base_url or Settings.baseurl
if archive_id.is_tools():
if tool_name:
if not tool_name.startswith("tools_"):
tool_name = "tools_" + tool_name
if tool_name is not None:
if not tool_name.startswith("tools_") and tool_name != "sdktool":
_tool_name = f"tools_{tool_name}"
else:
_tool_name = tool_name
if is_long_listing:
self.request_type = "tool long listing"
self._action = lambda: self.fetch_tool_long_listing(tool_name)
self._action: MetadataFactory.Action = lambda: self.fetch_tool_long_listing(_tool_name)
else:
self.request_type = "tool variant names"
self._action = lambda: self.fetch_tool_modules(tool_name)
self._action = lambda: self.fetch_tool_modules(_tool_name)
else:
self.request_type = "tools"
self._action = self.fetch_tools
elif is_latest_version:
self.request_type = "latest version"
self._action = lambda: Versions(self.fetch_latest_version())
elif modules_query:
self._action = lambda: Versions(self.fetch_latest_version(ext=""))
elif modules_query is not None:
version, arch = modules_query.version_str, modules_query.arch
if is_long_listing:
self.request_type = "long modules"
version, arch = modules_query
self._action = lambda: self.fetch_long_modules(self._to_version(version), arch)
self._action = lambda: self.fetch_long_modules(self._to_version(version, arch), arch)
else:
self.request_type = "modules"
version, arch = modules_query
self._action = lambda: self.fetch_modules(self._to_version(version), arch)
elif extensions_ver:
self.request_type = "extensions"
self._action = lambda: self.fetch_extensions(self._to_version(extensions_ver))
elif architectures_ver:
self._action = lambda: self.fetch_modules(self._to_version(version, arch), arch)
elif architectures_ver is not None:
ver_str: str = architectures_ver
self.request_type = "architectures"
self._action = lambda: self.fetch_arches(self._to_version(architectures_ver))
self._action = lambda: self.fetch_arches(self._to_version(ver_str, None))
elif archives_query:
if len(archives_query) < 2:
raise CliInputError("The '--archives' flag requires a 'QT_VERSION' and an 'ARCHITECTURE' parameter.")
self.request_type = "archives for modules" if len(archives_query) > 2 else "archives for qt"
version, arch, modules = archives_query[0], archives_query[1], archives_query[2:]
self._action = lambda: self.fetch_archives(self._to_version(version), arch, modules)
elif src_doc_examples_query:
cmd_type, version, is_modules_query = src_doc_examples_query
if is_modules_query:
self.request_type = f"modules for {cmd_type}"
self._action = lambda: self.fetch_modules_sde(cmd_type, version)
self._action = lambda: self.fetch_archives(self._to_version(version, arch), arch, modules)
elif src_doc_examples_query is not None:
q: MetadataFactory.SrcDocExamplesQuery = src_doc_examples_query
if q.is_modules_query:
self.request_type = f"modules for {q.cmd_type}"
self._action = lambda: self.fetch_modules_sde(q.cmd_type, q.version)
else:
self.request_type = f"archives for {cmd_type}"
self._action = lambda: self.fetch_archives_sde(cmd_type, version)
self.request_type = f"archives for {q.cmd_type}"
self._action = lambda: self.fetch_archives_sde(q.cmd_type, q.version)
else:
self.request_type = "versions"
self._action = self.fetch_versions
def getList(self) -> Union[List[str], Versions, ToolData]:
def getList(self) -> Metadata:
return self._action()
def fetch_arches(self, version: Version) -> List[str]:
self.validate_extension(version)
if self.archive_id.extension == "src_doc_examples":
return []
qt_ver_str = self._get_qt_version_str(version)
modules = self._fetch_module_metadata(self.archive_id.to_folder(qt_ver_str))
arches = []
for name in modules.keys():
ver, arch = name.split(".")[-2:]
if ver == qt_ver_str:
arches.append(arch)
qt_ver_str = self._get_qt_version_str(version)
for extension in self.archive_id.all_extensions(version):
modules: Dict[str, Dict[str, str]] = {}
try:
modules = self._fetch_module_metadata(self.archive_id.to_folder(qt_ver_str, extension))
except ArchiveDownloadError as e:
if extension == "":
raise
else:
self.logger.debug(e)
self.logger.debug(
f"Failed to retrieve arches list with extension `{extension}`. "
f"Please check that this extension exists for this version of Qt: "
f"if not, code changes will be necessary."
)
# It's ok to swallow this error: we will still print the other available architectures that aqt can
# install successfully. This is to prevent future errors such as those reported in #643
for name in modules.keys():
ver, arch = name.split(".")[-2:]
if ver == qt_ver_str:
arches.append(arch)
return arches
def fetch_extensions(self, version: Version) -> List[str]:
versions_extensions = self.get_versions_extensions(
self.fetch_http(self.archive_id.to_url(), False), self.archive_id.category
)
filtered = filter(
lambda ver_ext: ver_ext[0] == version and ver_ext[1],
versions_extensions,
)
return list(map(lambda ver_ext: ver_ext[1], filtered))
def fetch_versions(self) -> Versions:
def filter_by(ver_ext: Tuple[Optional[Version], str]) -> bool:
version, extension = ver_ext
return version and (self.spec is None or version in self.spec) and (self.archive_id.extension == extension)
def get_version(ver_ext: Tuple[Version, str]):
return ver_ext[0]
def fetch_versions(self, extension: str = "") -> Versions:
def filter_by(ver: Version, ext: str) -> bool:
return (self.spec is None or ver in self.spec) and ext == extension
versions_extensions = self.get_versions_extensions(
self.fetch_http(self.archive_id.to_url(), False), self.archive_id.category
)
versions = sorted(filter(None, map(get_version, filter(filter_by, versions_extensions))))
iterables = itertools.groupby(versions, lambda version: version.minor)
return Versions(iterables)
versions = sorted([ver for ver, ext in versions_extensions if ver is not None and filter_by(ver, ext)])
grouped = cast(Iterable[Tuple[int, Iterable[Version]]], itertools.groupby(versions, lambda version: version.minor))
return Versions(grouped)
def fetch_latest_version(self) -> Optional[Version]:
return self.fetch_versions().latest()
def fetch_latest_version(self, ext: str) -> Optional[Version]:
return self.fetch_versions(ext).latest()
def fetch_tools(self) -> List[str]:
html_doc = self.fetch_http(self.archive_id.to_url(), False)
@@ -544,36 +657,6 @@ class MetadataFactory:
def fetch_tool_long_listing(self, tool_name: str) -> ToolData:
return ToolData(self._fetch_module_metadata(tool_name))
def validate_extension(self, qt_ver: Version) -> None:
"""
Checks extension, and raises CliInputError if invalid.
Rules:
1. On Qt6 for Android, an extension for processor architecture is required.
2. On any platform other than Android, or on Qt5, an extension for
processor architecture is forbidden.
3. The "wasm" extension only works on desktop targets for Qt 5.13-5.15, or for 6.2+
"""
if (
self.archive_id.target == "android"
and qt_ver.major == 6
and self.archive_id.extension not in ArchiveId.EXTENSIONS_REQUIRED_ANDROID_QT6
):
raise CliInputError(
"Qt 6 for Android requires one of the following extensions: "
f"{ArchiveId.EXTENSIONS_REQUIRED_ANDROID_QT6}. "
"Please add your extension using the `--extension` flag."
)
if self.archive_id.extension in ArchiveId.EXTENSIONS_REQUIRED_ANDROID_QT6 and (
self.archive_id.target != "android" or qt_ver.major != 6
):
raise CliInputError(f"The extension '{self.archive_id.extension}' is only valid for Qt 6 for Android")
is_in_wasm_range = qt_ver in SimpleSpec(">=5.13,<6") or qt_ver in SimpleSpec(">=6.2.0")
if "wasm" in self.archive_id.extension and (self.archive_id.target != "desktop" or not is_in_wasm_range):
raise CliInputError(
f"The extension '{self.archive_id.extension}' is only available in Qt 5.13-5.15 and 6.2+ on desktop."
)
@staticmethod
def choose_highest_version_in_spec(
all_tools_data: Dict[str, Dict[str, str]], simple_spec: SimpleSpec
@@ -587,7 +670,7 @@ class MetadataFactory:
return None
# Remove items that don't conform to simple_spec
tools_versions = filter(lambda tool_item: tool_item[2] in simple_spec, tools_versions)
tools_versions = [tool_item for tool_item in tools_versions if tool_item[2] in simple_spec]
try:
# Return the conforming item with the highest version.
@@ -597,7 +680,7 @@ class MetadataFactory:
# There were no tools that fit the simple_spec
return None
def _to_version(self, qt_ver: str) -> Version:
def _to_version(self, qt_ver: str, arch: Optional[str]) -> Version:
"""
Turns a string in the form of `5.X.Y | latest` into a semantic version.
If the string does not fit either of these forms, CliInputError will be raised.
@@ -610,7 +693,8 @@ class MetadataFactory:
"""
assert qt_ver
if qt_ver == "latest":
latest_version = self.fetch_latest_version()
ext = QtRepoProperty.extension_for_arch(arch, True) if arch else ""
latest_version = self.fetch_latest_version(ext)
if not latest_version:
msg = "There is no latest version of Qt with the criteria '{}'".format(self.describe_filters())
raise CliInputError(msg)
@@ -623,24 +707,27 @@ class MetadataFactory:
def fetch_http(self, rest_of_url: str, is_check_hash: bool = True) -> str:
timeout = (Settings.connection_timeout, Settings.response_timeout)
expected_hash = get_hash(rest_of_url, "sha256", timeout) if is_check_hash else None
expected_hash = get_hash(rest_of_url, Settings.hash_algorithm, timeout) if is_check_hash else None
base_urls = self.base_url, random.choice(Settings.fallbacks)
err: BaseException = AssertionError("unraisable")
for i, base_url in enumerate(base_urls):
try:
url = posixpath.join(base_url, rest_of_url)
return getUrl(url=url, timeout=timeout, expected_hash=expected_hash)
except (ArchiveDownloadError, ArchiveConnectionError) as e:
if i == len(base_urls) - 1:
raise e from e
else:
err = e
if i < len(base_urls) - 1:
getLogger("aqt.metadata").debug(
f"Connection to '{base_url}' failed. Retrying with fallback '{base_urls[i + 1]}'."
)
raise err from err
def iterate_folders(self, html_doc: str, html_url: str, *, filter_category: str = "") -> Generator[str, None, None]:
def link_to_folder(link: bs4.element.Tag) -> str:
raw_url: str = link.get("href", default="")
raw_url: str = str(link.get("href", default=""))
url: ParseResult = urlparse(raw_url)
if url.scheme or url.netloc:
return ""
@@ -657,6 +744,8 @@ class MetadataFactory:
continue
if folder.startswith(filter_category):
yield folder
if filter_category == "tools" and folder == "sdktool":
yield folder
except Exception as e:
raise ArchiveConnectionError(
f"Failed to retrieve the expected HTML page at {html_url}",
@@ -689,7 +778,7 @@ class MetadataFactory:
if downloads is None or update_file is None:
return False
uncompressed_size = int(update_file.attrib["UncompressedSize"])
return downloads.text and uncompressed_size >= Settings.min_module_size
return downloads.text is not None and uncompressed_size >= Settings.min_module_size
def _get_qt_version_str(self, version: Version) -> str:
"""Returns a Qt version, without dots, that works in the Qt repo urls and Updates.xml files"""
@@ -703,7 +792,7 @@ class MetadataFactory:
def _fetch_module_metadata(self, folder: str, predicate: Optional[Callable[[Element], bool]] = None):
rest_of_url = posixpath.join(self.archive_id.to_url(), folder, "Updates.xml")
xml = self.fetch_http(rest_of_url)
xml = self.fetch_http(rest_of_url) if not Settings.ignore_hash else self.fetch_http(rest_of_url, False)
return xml_to_modules(
xml,
predicate=predicate if predicate else MetadataFactory._has_nonempty_downloads,
@@ -711,34 +800,41 @@ class MetadataFactory:
def fetch_modules(self, version: Version, arch: str) -> List[str]:
"""Returns list of modules"""
self.validate_extension(version)
extension = QtRepoProperty.extension_for_arch(arch, version >= Version("6.0.0"))
qt_ver_str = self._get_qt_version_str(version)
# Example: re.compile(r"^(preview\.)?qt\.(qt5\.)?590\.(.+)$")
pattern = re.compile(r"^(preview\.)?qt\.(qt" + str(version.major) + r"\.)?" + qt_ver_str + r"\.(.+)$")
modules_meta = self._fetch_module_metadata(self.archive_id.to_folder(qt_ver_str))
modules_meta = self._fetch_module_metadata(self.archive_id.to_folder(qt_ver_str, extension))
def to_module_arch(name: str) -> Tuple[Optional[str], Optional[str]]:
_match = pattern.match(name)
if not _match:
return None, None
module_with_arch = _match.group(3)
if self.archive_id.is_no_arch() or "." not in module_with_arch:
if "." not in module_with_arch:
return module_with_arch, None
module, arch = module_with_arch.rsplit(".", 1)
if module.startswith("addons."):
module = module[len("addons.") :]
return module, arch
modules = set()
modules: Set[str] = set()
for name in modules_meta.keys():
module, _arch = to_module_arch(name)
if _arch == arch:
modules.add(module)
modules.add(cast(str, module))
return sorted(modules)
@staticmethod
def require_text(element: Element, key: str) -> str:
node = element.find(key)
if node is None:
raise ArchiveListError(f"Downloaded metadata does not match the expected structure. Missing key: {key}")
return node.text or ""
def fetch_long_modules(self, version: Version, arch: str) -> ModuleData:
"""Returns long listing of modules"""
self.validate_extension(version)
extension = QtRepoProperty.extension_for_arch(arch, version >= Version("6.0.0"))
qt_ver_str = self._get_qt_version_str(version)
# Example: re.compile(r"^(preview\.)?qt\.(qt5\.)?590(\.addons)?\.(?P<module>[^.]+)\.gcc_64$")
pattern = re.compile(
@@ -752,11 +848,16 @@ class MetadataFactory:
)
def matches_arch(element: Element) -> bool:
name_node = element.find("Name")
return bool(name_node is not None) and bool(pattern.match(str(name_node.text)))
return bool(pattern.match(MetadataFactory.require_text(element, "Name")))
modules_meta = self._fetch_module_metadata(self.archive_id.to_folder(qt_ver_str), matches_arch)
m = {pattern.match(key).group("module"): value for key, value in modules_meta.items()}
modules_meta = self._fetch_module_metadata(self.archive_id.to_folder(qt_ver_str, extension), matches_arch)
m: Dict[str, Dict[str, str]] = {}
for key, value in modules_meta.items():
match = pattern.match(key)
if match is not None:
module = match.group("module")
if module is not None:
m[module] = value
return ModuleData(m)
@@ -765,9 +866,8 @@ class MetadataFactory:
assert (
cmd_type in ("doc", "examples") and self.archive_id.target == "desktop"
), "Internal misuse of fetch_modules_sde"
self.validate_extension(version)
qt_ver_str = self._get_qt_version_str(version)
modules_meta = self._fetch_module_metadata(self.archive_id.to_folder(qt_ver_str))
modules_meta = self._fetch_module_metadata(self.archive_id.to_folder(qt_ver_str, "src_doc_examples"))
# pattern: Match all names "qt.qt5.12345.doc.(\w+)
pattern = re.compile(r"^qt\.(qt" + str(version.major) + r"\.)?" + qt_ver_str + r"\." + cmd_type + r"\.(.+)$")
@@ -783,28 +883,31 @@ class MetadataFactory:
assert (
cmd_type in ("src", "doc", "examples") and self.archive_id.target == "desktop"
), "Internal misuse of fetch_archives_sde"
return self.fetch_archives(version, cmd_type, [])
return self.fetch_archives(version, cmd_type, [], is_sde=True)
def fetch_archives(self, version: Version, arch: str, modules: List[str]) -> List[str]:
def fetch_archives(self, version: Version, arch: str, modules: List[str], is_sde: bool = False) -> List[str]:
extension = "src_doc_examples" if is_sde else QtRepoProperty.extension_for_arch(arch, version >= Version("6.0.0"))
qt_version_str = self._get_qt_version_str(version)
nonempty = MetadataFactory._has_nonempty_downloads
def all_modules(element: Element) -> bool:
_module, _arch = element.find("Name").text.split(".")[-2:]
_module, _arch = MetadataFactory.require_text(element, "Name").split(".")[-2:]
return _arch == arch and _module != qt_version_str and nonempty(element)
def specify_modules(element: Element) -> bool:
_module, _arch = element.find("Name").text.split(".")[-2:]
_module, _arch = MetadataFactory.require_text(element, "Name").split(".")[-2:]
return _arch == arch and _module in modules and nonempty(element)
def no_modules(element: Element) -> bool:
name: Optional[str] = element.find("Name").text
return name and name.endswith(f".{qt_version_str}.{arch}") and nonempty(element)
name: Optional[str] = getattr(element.find("Name"), "text", None)
return name is not None and name.endswith(f".{qt_version_str}.{arch}") and nonempty(element)
predicate = no_modules if not modules else all_modules if "all" in modules else specify_modules
try:
mod_metadata = self._fetch_module_metadata(self.archive_id.to_folder(qt_version_str), predicate=predicate)
except (AttributeError,) as e:
mod_metadata = self._fetch_module_metadata(
self.archive_id.to_folder(qt_version_str, extension), predicate=predicate
)
except (AttributeError, ValueError) as e:
raise ArchiveListError(f"Downloaded metadata is corrupted. {e}") from e
# Did we find all requested modules?
@@ -825,6 +928,20 @@ class MetadataFactory:
return str(self.archive_id)
return "{} with spec {}".format(self.archive_id, self.spec)
def fetch_default_desktop_arch(self, version: Version, is_msvc: bool = False) -> str:
assert self.archive_id.target == "desktop", "This function is meant to fetch desktop architectures"
if self.archive_id.host == "linux":
return "gcc_64"
elif self.archive_id.host == "mac":
return "clang_64"
elif self.archive_id.host == "windows" and is_msvc:
return "win64_msvc2019_64"
arches = [arch for arch in self.fetch_arches(version) if QtRepoProperty.MINGW_ARCH_PATTERN.match(arch)]
selected_arch = QtRepoProperty.select_default_mingw(arches, is_dir=False)
if not selected_arch:
raise EmptyMetadata("No default desktop architecture available")
return selected_arch
def suggested_follow_up(meta: MetadataFactory) -> List[str]:
"""Makes an informed guess at what the user got wrong, in the event of an error."""
@@ -833,8 +950,6 @@ def suggested_follow_up(meta: MetadataFactory) -> List[str]:
base_cmd = "aqt {0} {1.host} {1.target}".format(list_cmd, meta.archive_id)
versions_msg = f"Please use '{base_cmd}' to show versions of Qt available."
arches_msg = f"Please use '{base_cmd} --arch <QT_VERSION>' to show architectures available."
if meta.archive_id.extension:
msg.append(f"Please use '{base_cmd} --extensions <QT_VERSION>' to list valid extensions.")
if meta.archive_id.is_tools() and meta.request_type == "tool variant names":
msg.append(f"Please use '{base_cmd}' to check what tools are available.")

View File

@@ -16,6 +16,8 @@ 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
[mirrors]
trusted_mirrors:
@@ -27,7 +29,6 @@ blacklist:
fallbacks:
https://qtproject.mirror.liquidtelecom.com/
https://mirrors.aliyun.com/qt/
https://mirrors.sjtug.sjtu.edu.cn/qt/
https://mirrors.ustc.edu.cn/qtproject/
https://ftp.jaist.ac.jp/pub/qtproject/
https://ftp.yz.yamagata-u.ac.jp/pub/qtproject/

View File

@@ -20,30 +20,21 @@
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
import logging
import os
import pathlib
import re
import stat
import subprocess
from logging import getLogger
from typing import Union
from pathlib import Path
from typing import Dict, List, Optional, Union
import patch
from aqt.archives import TargetConfig
from aqt.exceptions import QmakeNotFound, UpdaterError
from aqt.helper import Settings
from aqt.metadata import SimpleSpec, Version
from aqt.metadata import ArchiveId, MetadataFactory, QtRepoProperty, SimpleSpec, Version
def default_desktop_arch_dir(host: str, version: Union[Version, str]) -> str:
version: Version = version if isinstance(version, Version) else Version(version)
if host == "linux":
return "gcc_64"
elif host == "mac":
return "macos" if version in SimpleSpec(">=6.1.2") else "clang_64"
else: # Windows
# This is a temporary solution. This arch directory cannot exist for many versions of Qt.
# TODO: determine this dynamically
return "mingw81_64"
dir_for_version = QtRepoProperty.dir_for_version
def dir_for_version(ver: Version) -> str:
@@ -71,8 +62,13 @@ def dir_for_arch(arch: str, os_name: str, version: Version) -> str:
return arch_dir
def unpatched_path(os_name: str, final_component: str) -> str:
return ("/home/qt/work/install" if os_name == "linux" else "/Users/qt/work/install") + "/" + final_component
def unpatched_paths() -> List[str]:
return [
"/home/qt/work/install/",
"/Users/qt/work/install/",
"\\home\\qt\\work\\install\\",
"\\Users\\qt\\work\\install\\",
]
class QtConfig:
@@ -103,11 +99,13 @@ class QtConfig:
class Updater:
def __init__(self, prefix: pathlib.Path, logger):
def __init__(self, prefix: Path, logger):
self.logger = logger
self.prefix = prefix
self.qmake_path: Optional[Path] = None
self.qconfigs: Dict[str, str] = {}
def _patch_binfile(self, file: pathlib.Path, key: bytes, newpath: bytes):
def _patch_binfile(self, file: Path, key: bytes, newpath: bytes):
"""Patch binary file with key/value"""
st = file.stat()
data = file.read_bytes()
@@ -122,7 +120,7 @@ class Updater:
file.write_bytes(data)
os.chmod(str(file), st.st_mode)
def _append_string(self, file: pathlib.Path, val: str):
def _append_string(self, file: Path, val: str):
"""Append string to file"""
st = file.stat()
data = file.read_text("UTF-8")
@@ -130,12 +128,41 @@ class Updater:
file.write_text(data, "UTF-8")
os.chmod(str(file), st.st_mode)
def _patch_textfile(self, file: pathlib.Path, old: str, new: str):
def _patch_textfile(self, file: Path, old: Union[str, re.Pattern], new: str, *, is_executable: bool = False):
st = file.stat()
file_mode = st.st_mode | (stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH if is_executable else 0)
data = file.read_text("UTF-8")
data = data.replace(old, new)
if isinstance(old, re.Pattern):
data = old.sub(new, data)
else:
data = data.replace(old, new)
file.write_text(data, "UTF-8")
os.chmod(str(file), st.st_mode)
os.chmod(str(file), file_mode)
def _detect_qmake(self) -> bool:
"""detect Qt configurations from qmake."""
for qmake_path in [
self.prefix.joinpath("bin", "qmake"),
self.prefix.joinpath("bin", "qmake.exe"),
]:
if not qmake_path.exists():
continue
try:
result = subprocess.run([str(qmake_path), "-query"], stdout=subprocess.PIPE)
except (subprocess.SubprocessError, IOError, OSError):
return False
if result.returncode == 0:
self.qmake_path = qmake_path
for line in result.stdout.splitlines():
vals = line.decode("UTF-8").split(":")
self.qconfigs[vals[0]] = vals[1]
return True
return False
def patch_prl(self, oldvalue):
for prlfile in self.prefix.joinpath("lib").glob("*.prl"):
self.logger.info("Patching {}".format(prlfile))
self._patch_textfile(prlfile, oldvalue, "$$[QT_INSTALL_LIBS]")
def patch_pkgconfig(self, oldvalue, os_name):
for pcfile in self.prefix.joinpath("lib", "pkgconfig").glob("*.pc"):
@@ -189,9 +216,10 @@ class Updater:
def patch_qmake(self):
"""Patch to qmake binary"""
try:
qmake_config = QtConfig(prefix=self.prefix)
self.logger.info("Patching {}".format(str(qmake_config.qmake_path)))
if self._detect_qmake():
if self.qmake_path is None:
return
self.logger.info("Patching {}".format(str(self.qmake_path)))
self._patch_binfile(
qmake_config.qmake_path,
key=b"qt_prfxpath=",
@@ -210,14 +238,13 @@ class Updater:
except QmakeNotFound:
pass
def patch_qmake_script(self, base_dir, qt_version: str, os_name):
arch_dir = default_desktop_arch_dir(os_name, qt_version)
def patch_qmake_script(self, base_dir, qt_version: str, os_name: str, desktop_arch_dir: str):
sep = "\\" if os_name == "windows" else "/"
patched = sep.join([base_dir, qt_version, arch_dir, "bin"])
unpatched = unpatched_path(os_name, "bin")
patched = sep.join([base_dir, qt_version, desktop_arch_dir, "bin"])
qmake_path = self.prefix / "bin" / ("qmake.bat" if os_name == "windows" else "qmake")
self.logger.info(f"Patching {qmake_path}")
self._patch_textfile(qmake_path, unpatched, patched)
for unpatched in unpatched_paths():
self._patch_textfile(qmake_path, f"{unpatched}bin", patched, is_executable=True)
def patch_qtcore(self, target):
"""patch to QtCore"""
@@ -254,7 +281,7 @@ class Updater:
f.write("cd /D {}\n".format(os.path.join(base_dir, qt_version, arch_dir)))
f.write("echo Remember to call vcvarsall.bat to complete environment setup!\n")
def set_license(self, base_dir, qt_version, arch_dir):
def set_license(self, base_dir: str, qt_version: str, arch_dir: str):
"""Update qtconfig.pri as OpenSource"""
with open(os.path.join(base_dir, qt_version, arch_dir, "mkspecs", "qconfig.pri"), "r+") as f:
lines = f.readlines()
@@ -267,58 +294,95 @@ class Updater:
line = "QT_LICHECK =\n"
f.write(line)
def patch_target_qt_conf(self, base_dir, qt_version, arch_dir, os_name):
def patch_target_qt_conf(self, base_dir: str, qt_version: str, arch_dir: str, os_name: str, desktop_arch_dir: str):
target_qt_conf = self.prefix / "bin" / "target_qt.conf"
old_targetprefix = f'Prefix={unpatched_path(os_name, "target")}'
new_hostprefix = f"HostPrefix=../../{default_desktop_arch_dir(os_name, qt_version)}"
new_targetprefix = "Prefix={}".format(str(pathlib.Path(base_dir).joinpath(qt_version, arch_dir, "target")))
new_hostprefix = f"HostPrefix=../../{desktop_arch_dir}"
new_targetprefix = "Prefix={}".format(str(Path(base_dir).joinpath(qt_version, arch_dir, "target")))
new_hostdata = "HostData=../{}".format(arch_dir)
self._patch_textfile(target_qt_conf, old_targetprefix, new_targetprefix)
new_host_lib_execs = "./bin" if os_name == "windows" else "./libexec"
old_host_lib_execs = re.compile(r"^HostLibraryExecutables=[^\n]*$", flags=re.MULTILINE)
self._patch_textfile(target_qt_conf, old_host_lib_execs, f"HostLibraryExecutables={new_host_lib_execs}")
for unpatched in unpatched_paths():
self._patch_textfile(target_qt_conf, f"Prefix={unpatched}target", new_targetprefix)
self._patch_textfile(target_qt_conf, "HostPrefix=../../", new_hostprefix)
self._patch_textfile(target_qt_conf, "HostData=target", new_hostdata)
def patch_qdevice_file(self, base_dir: str, qt_version: str, arch_dir: str, os_name: str):
"""Qt 6.4.1+ specific, but it should not hurt anything if `mkspecs/qdevice.pri` does not exist"""
qdevice = Path(base_dir) / qt_version / arch_dir / "mkspecs/qdevice.pri"
if not qdevice.exists():
return
old_line = re.compile(r"^DEFAULT_ANDROID_NDK_HOST =[^\n]*$", flags=re.MULTILINE)
new_line = f"DEFAULT_ANDROID_NDK_HOST = {'darwin' if os_name == 'mac' else os_name}-x86_64"
self._patch_textfile(qdevice, old_line, new_line)
@classmethod
def update(cls, target: TargetConfig, base_dir: str):
def update(cls, target: TargetConfig, base_path: Path, installed_desktop_arch_dir: Optional[str]):
"""
Make Qt configuration files, qt.conf and qtconfig.pri.
And update pkgconfig and patch Qt5Core and qmake
:param installed_desktop_arch_dir: This is the path to a desktop Qt installation, like `Qt/6.3.0/mingw_win64`.
This may or may not contain an actual desktop Qt installation.
If it does not, the Updater will patch files in a mobile Qt installation
that point to this directory, and this installation will be non-functional
until the user installs a desktop Qt in this directory.
"""
logger = getLogger("aqt.updater")
arch = target.arch
version = Version(target.version)
os_name = target.os_name
version_dir = dir_for_version(version)
arch_dir = dir_for_arch(arch, os_name, version)
prefix = pathlib.Path(base_dir) / version_dir / arch_dir
arch_dir = QtRepoProperty.get_arch_dir_name(os_name, arch, version)
base_dir = str(base_path)
try:
prefix = base_path / version_dir / arch_dir
updater = Updater(prefix, logger)
updater.set_license(base_dir, version_dir, arch_dir)
if target.arch not in [
"ios",
"android",
"wasm_32",
"wasm_singlethread",
"wasm_multithread",
"android_x86_64",
"android_arm64_v8a",
"android_x86",
"android_armv7",
"win64_msvc2019_arm64",
]: # desktop version
updater.make_qtconf(base_dir, version_dir, arch_dir)
updater.patch_qmake()
if target.os_name == "linux":
updater.patch_pkgconfig("/home/qt/work/install", target.os_name)
updater.patch_libtool("/home/qt/work/install/lib", target.os_name)
updater.patch_prl("/home/qt/work/install/lib")
elif target.os_name == "mac":
updater.patch_pkgconfig("/Users/qt/work/install", target.os_name)
updater.patch_libtool("/Users/qt/work/install/lib", target.os_name)
updater.patch_prl("/Users/qt/work/install/lib")
elif target.os_name == "windows":
updater.patch_pkgconfig("c:/Users/qt/work/install", target.os_name)
updater.patch_prl("c:/Users/qt/work/install/lib")
updater.make_qtenv2(base_dir, version_dir, arch_dir)
if version < Version("5.14.0"):
updater.patch_qtcore(target)
elif version in SimpleSpec(">=5.0,<6.0"):
updater.patch_qmake()
else: # qt6 non-desktop
updater.patch_qmake_script(base_dir, version_dir, target.os_name)
updater.patch_target_qt_conf(base_dir, version_dir, arch_dir, target.os_name)
else: # qt6 mobile, wasm, or msvc-arm64
if installed_desktop_arch_dir is not None:
desktop_arch_dir = installed_desktop_arch_dir
else:
# Use MetadataFactory to check what the default architecture should be
meta = MetadataFactory(ArchiveId("qt", os_name, "desktop"))
desktop_arch_dir = meta.fetch_default_desktop_arch(version, is_msvc="msvc" in target.arch)
updater.patch_qmake_script(base_dir, version_dir, target.os_name, desktop_arch_dir)
updater.patch_target_qt_conf(base_dir, version_dir, arch_dir, target.os_name, desktop_arch_dir)
updater.patch_qdevice_file(base_dir, version_dir, arch_dir, target.os_name)
except IOError as e:
raise UpdaterError(f"Updater caused an IO error: {e}") from e

View File

@@ -1,19 +1,11 @@
trigger:
trigger: none
pr: none
schedules:
- cron: '0 12 * * 0'
displayName: Weekly sunday full tests
branches:
include:
- releases/*
- refs/tags/v*
pr:
branches:
include:
- master
- releases/*
paths:
include:
- aqt/*
- ci/*
- azure-pipelines.yml
- master
jobs:
- job: MatricesGenerator
@@ -23,7 +15,7 @@ jobs:
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '3.8'
versionSpec: '3.9'
addToPath: true
- bash: python ci/generate_azure_pipelines_matrices.py
name: mtrx
@@ -32,7 +24,7 @@ jobs:
- job: Mac
dependsOn: MatricesGenerator
pool:
vmImage: 'macOS-10.15'
vmImage: 'macOS-12'
strategy:
matrix: $[ dependencies.MatricesGenerator.outputs['mtrx.mac'] ]
steps:
@@ -56,7 +48,7 @@ jobs:
- job: Linux
dependsOn: MatricesGenerator
pool:
vmImage: 'ubuntu-20.04'
vmImage: 'ubuntu-22.04'
strategy:
matrix: $[ dependencies.MatricesGenerator.outputs['mtrx.linux'] ]
steps:

Binary file not shown.

View File

@@ -1,10 +0,0 @@
pip install -U pip
pip install virtualenv
virtualenv build_venv
call build_venv\Scripts\activate.bat
move pyproject.toml pyproject.toml.bak
pip install -e .[test,docs,check]
pip install gravitybee
gravitybee --with-latest
call build_venv\Scripts\deactivate.bat
move .gravitybee\dist\latest\aqtinstall-*.exe .gravitybee\dist\latest\aqt.exe

View File

@@ -32,8 +32,11 @@ class BuildJob:
list_options=None,
spec=None,
mingw_variant: str = "",
is_autodesktop: bool = False,
tool_options: Optional[Dict[str, str]] = None,
check_output_cmd: Optional[str] = None,
emsdk_version: str = "sdk-fastcomp-1.38.27-64bit@3.1.29",
autodesk_arch_folder: Optional[str] = None,
):
self.command = command
self.qt_version = qt_version
@@ -45,12 +48,15 @@ class BuildJob:
self.mirror = mirror
self.subarchives = subarchives
self.mingw_variant: str = mingw_variant
self.is_autodesktop: bool = is_autodesktop
self.list_options = list_options if list_options else {}
self.tool_options: Dict[str, str] = tool_options if tool_options else {}
# `steps.yml` assumes that qt_version is the highest version that satisfies spec
self.spec = spec
self.output_dir = output_dir
self.check_output_cmd = check_output_cmd
self.emsdk_version = emsdk_version
self.autodesk_arch_folder = autodesk_arch_folder
def qt_bindir(self, *, sep='/') -> str:
out_dir = f"$(Build.BinariesDirectory){sep}Qt" if not self.output_dir else self.output_dir
@@ -60,6 +66,14 @@ class BuildJob:
def win_qt_bindir(self) -> str:
return self.qt_bindir(sep='\\')
def autodesk_qt_bindir(self, *, sep='/') -> str:
out_dir = f"$(Build.BinariesDirectory){sep}Qt" if not self.output_dir else self.output_dir
version_dir = "5.9" if self.qt_version == "5.9.0" else self.qt_version
return f"{out_dir}{sep}{version_dir}{sep}{self.autodesk_arch_folder or self.archdir}{sep}bin"
def win_autodesk_qt_bindir(self) -> str:
return self.autodesk_qt_bindir(sep='\\')
def mingw_folder(self) -> str:
if not self.mingw_variant:
return ""
@@ -73,11 +87,9 @@ class PlatformBuildJobs:
self.build_jobs = build_jobs
python_versions = [
"3.8",
]
python_versions = ["3.9", "3.11", "3.12"]
qt_versions = ["5.13.2", "5.15.2"]
qt_versions = ["5.12.12", "5.15.14", "6.5.3"]
linux_build_jobs = []
mac_build_jobs = []
@@ -123,6 +135,17 @@ windows_build_jobs.extend(
mingw_variant="win32_mingw730",
mirror=random.choice(MIRRORS),
),
BuildJob(
"install-qt",
"5.11.3",
"windows",
"desktop",
"win32_mingw53",
"mingw53_32",
subarchives="qtwinextras qtmultimedia qtbase qttools",
mingw_variant="win32_mingw530",
mirror=random.choice(MIRRORS),
),
BuildJob(
"install-qt",
"5.13.2",
@@ -154,6 +177,16 @@ windows_build_jobs.extend(
module="qtcharts qtnetworkauth",
mirror=random.choice(MIRRORS),
),
BuildJob(
"install-qt",
"5.11.3",
"windows",
"desktop",
"win32_msvc2015",
"msvc2015",
subarchives="qtwinextras qtmultimedia qtbase qttools",
mirror=random.choice(MIRRORS),
),
BuildJob(
"install-qt",
"5.9.0",
@@ -175,6 +208,21 @@ windows_build_jobs.extend(
spec=">1,<5.15", # Don't redirect output! Must be wrapped in quotes!
mirror=random.choice(MIRRORS),
),
BuildJob(
"install-qt",
"6.5.2",
"windows",
"desktop",
"win64_msvc2019_arm64",
"msvc2019_arm64",
is_autodesktop=True, # Should install win64_msvc2019_arm64 in parallel
),
BuildJob(
# Archives stored as .zip
"install-src", "6.4.3", "windows", "desktop", "gcc_64", "gcc_64", subarchives="qtlottie",
# Fail the job if this path does not exist:
check_output_cmd="ls -lh ./6.4.3/Src/qtlottie/",
),
]
)
@@ -200,13 +248,20 @@ linux_build_jobs.extend(
"desktop",
"gcc_64",
"gcc_64",
subarchives="qtbase qttools qt icu",
subarchives="qtbase qttools qt icu qttools",
),
BuildJob(
# Archives stored as .7z
"install-src", "6.1.0", "linux", "desktop", "gcc_64", "gcc_64", subarchives="qtlottie",
# Fail the job if this path does not exist:
check_output_cmd="ls -lh ./6.1.0/Src/qtlottie/",
),
BuildJob(
# Archives stored as .tar.gz
"install-src", "6.4.3", "linux", "desktop", "gcc_64", "gcc_64", subarchives="qtlottie",
# Fail the job if this path does not exist:
check_output_cmd="ls -lh ./6.4.3/Src/qtlottie/",
),
# Should install the `qtlottie` module, even though the archive `qtlottieanimation` is not specified:
BuildJob(
"install-doc", "6.1.0", "linux", "desktop", "gcc_64", "gcc_64",
@@ -222,13 +277,9 @@ linux_build_jobs.extend(
check_output_cmd="ls -lh ./Examples/Qt-6.1.0/charts/ ./Examples/Qt-6.1.0/demos/ ./Examples/Qt-6.1.0/tutorials/",
),
# test for list commands
BuildJob('list', '5.15.2', 'linux', 'desktop', 'gcc_64', '', spec="<6", list_options={
'HAS_EXTENSIONS': "True",
}),
BuildJob('list', '6.1.0', 'linux', 'android', 'android_armv7', '', spec=">6.0,<6.1.1", list_options={
'HAS_EXTENSIONS': "True",
'USE_EXTENSION': "armv7",
}),
BuildJob('list', '5.15.2', 'linux', 'desktop', 'gcc_64', '', spec="<6", list_options={'HAS_WASM': "True"}),
BuildJob('list', '6.1.0', 'linux', 'desktop', 'gcc_64', '', spec=">6.0,<6.1.1", list_options={'HAS_WASM': "False"}),
BuildJob('list', '6.1.0', 'linux', 'android', 'android_armv7', '', spec=">6.0,<6.1.1", list_options={}),
# tests run on linux but query data about other platforms
BuildJob('list', '5.14.1', 'mac', 'ios', 'ios', '', spec="<=5.14.1", list_options={}),
BuildJob('list', '5.13.1', 'windows', 'winrt', 'win64_msvc2015_winrt_x64', '', spec=">5.13.0,<5.13.2", list_options={}),
@@ -261,22 +312,59 @@ mac_build_jobs.extend(
linux_build_jobs.append(
BuildJob("install-qt", "5.14.2", "linux", "desktop", "wasm_32", "wasm_32")
)
linux_build_jobs.append(
BuildJob("install-qt", "6.4.0", "linux", "desktop", "wasm_32", "wasm_32",
is_autodesktop=True, emsdk_version="sdk-3.1.14-64bit", autodesk_arch_folder="gcc_64")
)
for job_queue, host, desk_arch in (
(linux_build_jobs, "linux", "gcc_64"),
(mac_build_jobs, "mac", "clang_64"),
(windows_build_jobs, "windows", "mingw_64"),
):
for wasm_arch in ("wasm_singlethread", "wasm_multithread"):
job_queue.append(
BuildJob("install-qt", "6.5.0", host, "desktop", wasm_arch, wasm_arch,
is_autodesktop=True, emsdk_version="sdk-3.1.25-64bit", autodesk_arch_folder=desk_arch)
)
mac_build_jobs.append(
BuildJob("install-qt", "5.14.2", "mac", "desktop", "wasm_32", "wasm_32")
)
mac_build_jobs.append(
BuildJob("install-qt", "6.4.0", "mac", "desktop", "wasm_32", "wasm_32",
is_autodesktop=True, emsdk_version="sdk-3.1.14-64bit", autodesk_arch_folder="clang_64")
)
windows_build_jobs.append(
BuildJob("install-qt", "5.14.2", "windows", "desktop", "wasm_32", "wasm_32")
)
windows_build_jobs.append(
BuildJob("install-qt", "6.4.0", "windows", "desktop", "wasm_32", "wasm_32",
is_autodesktop=True, emsdk_version="sdk-3.1.14-64bit", autodesk_arch_folder="mingw_64",
mingw_variant="win64_mingw900")
)
# mobile SDK
mac_build_jobs.extend(
[
BuildJob("install-qt", "5.15.2", "mac", "ios", "ios", "ios"),
BuildJob("install-qt", "6.2.2", "mac", "ios", "ios", "ios", module="qtsensors"),
BuildJob(
"install-qt", "6.1.0", "mac", "android", "android_armv7", "android_armv7"
),
BuildJob("install-qt", "6.4.0", "mac", "ios", "ios", "ios", module="qtsensors", is_autodesktop=True),
BuildJob("install-qt", "6.2.4", "mac", "ios", "ios", "ios", module="qtsensors", is_autodesktop=False),
BuildJob("install-qt", "6.4.1", "mac", "android", "android_armv7", "android_armv7", is_autodesktop=True),
BuildJob("install-qt", "6.1.0", "mac", "android", "android_armv7", "android_armv7", is_autodesktop=True),
]
)
linux_build_jobs.extend(
[BuildJob("install-qt", "6.1.0", "linux", "android", "android_armv7", "android_armv7")]
[
BuildJob("install-qt", "6.1.0", "linux", "android", "android_armv7", "android_armv7", is_autodesktop=True),
BuildJob("install-qt", "6.4.1", "linux", "android", "android_arm64_v8a", "android_arm64_v8a", is_autodesktop=True),
]
)
# Qt 6.3.0 for Windows-Android has win64_mingw available, but not win64_mingw81.
# This will test that the path to mingw is not hardcoded.
windows_build_jobs.extend(
[
BuildJob("install-qt", "6.3.0", "windows", "android", "android_armv7", "android_armv7", is_autodesktop=True),
BuildJob("install-qt", "6.4.1", "windows", "android", "android_x86_64", "android_x86_64", is_autodesktop=True),
]
)
# Test binary patch of qmake
@@ -368,11 +456,14 @@ for platform_build_job in all_platform_build_jobs:
("SPEC", build_job.spec if build_job.spec else ""),
("MINGW_VARIANT", build_job.mingw_variant),
("MINGW_FOLDER", build_job.mingw_folder()),
("HAS_EXTENSIONS", build_job.list_options.get("HAS_EXTENSIONS", "False")),
("USE_EXTENSION", build_job.list_options.get("USE_EXTENSION", "None")),
("IS_AUTODESKTOP", str(build_job.is_autodesktop)),
("HAS_WASM", build_job.list_options.get("HAS_WASM", "True")),
("OUTPUT_DIR", build_job.output_dir if build_job.output_dir else ""),
("QT_BINDIR", build_job.qt_bindir()),
("WIN_QT_BINDIR", build_job.win_qt_bindir()),
("EMSDK_VERSION", (build_job.emsdk_version+"@main").split('@')[0]),
("EMSDK_TAG", (build_job.emsdk_version+"@main").split('@')[1]),
("WIN_AUTODESK_QT_BINDIR", build_job.win_autodesk_qt_bindir()),
("TOOL1_ARGS", build_job.tool_options.get("TOOL1_ARGS", "")),
("LIST_TOOL1_CMD", build_job.tool_options.get("LIST_TOOL1_CMD", "")),
("TEST_TOOL1_CMD", build_job.tool_options.get("TEST_TOOL1_CMD", "")),

View File

@@ -3,8 +3,9 @@
import argparse
import json
import logging
import sys
from pathlib import Path
from typing import Dict, Generator, Iterable, List, Optional, Tuple, Union
from typing import Dict, Generator, Iterable, List, Optional, Tuple, Union, NamedTuple
from jsoncomparison import NO_DIFF, Compare
@@ -28,44 +29,21 @@ def iter_archive_ids(
category: str,
hosts: Iterable[str] = ArchiveId.HOSTS,
targets: Optional[Iterable[str]] = None,
add_extensions: bool = False,
) -> Generator[ArchiveId, None, None]:
def iter_extensions() -> Generator[str, None, None]:
if add_extensions and category == "qt":
if target == "android":
yield from ("", "x86_64", "x86", "armv7", "arm64_v8a")
return
elif target == "desktop":
yield from ("wasm", "")
return
yield ""
for host in sorted(hosts):
use_targets = targets
if use_targets is None:
use_targets = ArchiveId.TARGETS_FOR_HOST[host]
for target in use_targets:
for ext in iter_extensions():
yield ArchiveId(category, host, target, ext)
yield ArchiveId(category, host, target)
def iter_arches() -> Generator[dict, None, None]:
logger.info("Fetching arches")
archive_ids = list(iter_archive_ids(category="qt", add_extensions=True))
archive_ids = list(iter_archive_ids(category="qt"))
for archive_id in tqdm(archive_ids):
for version in ("latest", "5.15.2", "5.13.2", "5.9.9"):
if archive_id.extension == "wasm" and (
version == "5.9.9" or version == "latest"
):
continue
if archive_id.target == "android":
if version == "latest" and archive_id.extension == "":
continue
if version != "latest" and archive_id.extension != "":
continue
for arch_name in MetadataFactory(
archive_id, architectures_ver=version
).getList():
for arch_name in MetadataFactory(archive_id, architectures_ver=version).getList():
yield {
"os_name": archive_id.host,
"target": archive_id.target,
@@ -107,7 +85,7 @@ def iter_modules_for_qt_minor_groups(
yield {
"qt_version": f"{major}.{minor}",
"modules": MetadataFactory(
ArchiveId("qt", host, target), modules_query=(f"{major}.{minor}.0", arch)
ArchiveId("qt", host, target), modules_query=MetadataFactory.ModulesQuery(f"{major}.{minor}.0", arch)
).getList(),
}
@@ -229,6 +207,6 @@ if __name__ == "__main__":
tqdm = get_tqdm(args.no_tqdm)
exit(
sys.exit(
main(filename=json_filename, is_write_file=args.write, is_verbose=args.verbose)
)

BIN
ci/helloworld_qttools.7z Normal file

Binary file not shown.

BIN
ci/openglwindow_qt6.7z Normal file

Binary file not shown.

View File

@@ -9,7 +9,10 @@ baseurl: https://download.qt.io
connection_timeout: 30
response_timeout: 30
max_retries: 5
max_retries_on_connection_error: 5
retry_backoff: 0.1
max_retries_on_checksum_error: 5
max_retries_to_retrieve_hash: 5
[mirrors]
blacklist:

View File

@@ -45,12 +45,9 @@ steps:
if [[ "$(SUBARCHIVES)" != "" ]]; then
opt+=" --archives $(SUBARCHIVES)"
fi
if [[ "$(SPEC)" == "" ]]; then
python -m aqt install-qt $(HOST) $(TARGET) $(QT_VERSION) $(ARCH) $opt
else
python -m aqt install-qt $(HOST) $(TARGET) "$(SPEC)" $(ARCH) $opt
fi
if [[ "$(TARGET)" == "android" || "$(TARGET)" == "ios" ]]; then
if [[ "$(IS_AUTODESKTOP)" == "True" ]]; then
opt+=" --autodesktop"
elif [[ "$(TARGET)" == "android" || "$(TARGET)" == "ios" ]]; then
if [[ "$(HOST)" == "windows" ]]; then
python -m aqt install-qt $(HOST) desktop $(QT_VERSION) mingw81_64 --archives qtbase
else
@@ -58,6 +55,11 @@ steps:
python -m aqt install-qt $(HOST) desktop $(QT_VERSION) --archives qtbase qtdeclarative
fi
fi
if [[ "$(SPEC)" == "" ]]; then
python -m aqt install-qt $(HOST) $(TARGET) $(QT_VERSION) $(ARCH) $opt
else
python -m aqt install-qt $(HOST) $(TARGET) "$(SPEC)" $(ARCH) $opt
fi
if [[ "$(OUTPUT_DIR)" != "" ]]; then
# Use 'strings' to read binary
echo "Verify patched value of qt_prfxpath"
@@ -80,10 +82,6 @@ steps:
fi
fi
if [[ "$(SUBCOMMAND)" == "list" ]]; then
if [[ $(USE_EXTENSION) != "None" ]]; then
# In this case, if you don't specify an extension, Updates.xml just shows dependencies
ext="--extension $(USE_EXTENSION)"
fi
aqt list-qt $(HOST) # print all targets for host
aqt list-tool $(HOST) $(TARGET) # print all tools for host/target
aqt list-tool $(HOST) $(TARGET) qt3dstudio_runtime_240 # print all tool variant names for qt3dstudio
@@ -93,25 +91,27 @@ steps:
aqt list-tool $(HOST) $(TARGET) tools_qtcreator -l # print tool variant names, versions, release dates
fi
aqt list-qt $(HOST) $(TARGET) # print all versions of Qt
if [[ $(HOST) == "desktop" ]]; then
aqt list-qt $(HOST) $(TARGET) --extension wasm # print all wasm versions of Qt
else
! aqt list-qt $(HOST) $(TARGET) --extension wasm # there are no wasm versions of Qt
fi
aqt list-qt $(HOST) $(TARGET) $ext --spec "$(SPEC)" # print all versions of Qt in SimpleSpec
ver=$(aqt list-qt $(HOST) $(TARGET) $ext --spec "$(SPEC)" --latest-version) # latest Qt in SimpleSpec
aqt list-qt $(HOST) $(TARGET) --spec "$(SPEC)" # print all versions of Qt in SimpleSpec
ver=$(aqt list-qt $(HOST) $(TARGET) --spec "$(SPEC)" --latest-version) # latest Qt in SimpleSpec
[ $ver == $(QT_VERSION) ] # latest version in SPEC must be QT_VERSION
aqt list-qt $(HOST) $(TARGET) $ext --spec "$(SPEC)" --modules latest $(ARCH) # print modules for latest in SimpleSpec
aqt list-qt $(HOST) $(TARGET) $ext --modules $(QT_VERSION) $(ARCH) # print modules for version/host/target/arch
if [[ $(HAS_EXTENSIONS) == "True" ]]; then
aqt list-qt $(HOST) $(TARGET) --extensions $(QT_VERSION) # print choices for --extension flag
aqt list-qt $(HOST) $(TARGET) --spec "$(SPEC)" --extensions latest
else
! aqt list-qt $(HOST) $(TARGET) --extensions $(QT_VERSION)
! aqt list-qt $(HOST) $(TARGET) --spec "$(SPEC)" --extensions latest
aqt list-qt $(HOST) $(TARGET) --spec "$(SPEC)" --modules latest $(ARCH) # print modules for latest in SimpleSpec
aqt list-qt $(HOST) $(TARGET) --modules $(QT_VERSION) $(ARCH) # print modules for version/host/target/arch
aqt list-qt $(HOST) $(TARGET) --arch $(QT_VERSION) # print architectures for version/host/target
if [[ "$(TARGET)" == "desktop" ]]; then
if [[ "$(HAS_WASM)" == "True" ]]; then # fail if 'wasm_32' is not in the list
aqt list-qt $(HOST) $(TARGET) --arch $(QT_VERSION) | grep -w -q "wasm_32"
else # fail if 'wasm_32' is in the list
! aqt list-qt $(HOST) $(TARGET) --arch $(QT_VERSION) | grep -w -q "wasm_32"
fi
# Extra check for Qt 6.5.0 WASM:
for host in mac linux windows; do
export WASM_ARCHES=$(aqt list-qt $host desktop --arch 6.5.0)
echo $WASM_ARCHES | grep -w -q "wasm_singlethread" # fail if 'wasm_singlethread' is not in the list
echo $WASM_ARCHES | grep -w -q "wasm_multithread" # fail if 'wasm_multithread' is not in the list
done
fi
aqt list-qt $(HOST) $(TARGET) $ext --arch $(QT_VERSION) # print architectures for version/host/target
aqt list-qt $(HOST) $(TARGET) $ext --spec "$(SPEC)" --arch latest
aqt list-qt $(HOST) $(TARGET) --spec "$(SPEC)" --arch latest
# list-src/doc/example
aqt list-src $(HOST) $(QT_VERSION) # print source archives available for host/desktop/version
@@ -172,7 +172,16 @@ steps:
export PATH=$(QT_BINDIR):$PATH
qmake $(Build.BinariesDirectory)/tests/accelbubble
make
condition: and(eq(variables['TARGET'], 'android'), or(eq(variables['Agent.OS'], 'Linux'), eq(variables['Agent.OS'], 'Darwin')), ne(variables['SUBCOMMAND'], 'list'), ne(variables['SUBCOMMAND'], 'install-tool'))
condition: |
and(
eq(variables['TARGET'], 'android'),
or(
eq(variables['Agent.OS'], 'Linux'),
eq(variables['Agent.OS'], 'Darwin')
),
ne(variables['SUBCOMMAND'], 'list'),
ne(variables['SUBCOMMAND'], 'install-tool')
)
displayName: Build accelbubble example application to test for android
##----------------------------------------------------
@@ -250,7 +259,17 @@ steps:
export PATH=$(QT_BINDIR):$PATH
qmake $(Build.BinariesDirectory)/tests/helloworld
make
condition: and(eq( variables['TARGET'], 'desktop' ), ne( variables['ARCH'], 'wasm_32' ), or(eq(variables['Agent.OS'], 'Linux'), eq(variables['Agent.OS'], 'Darwin')), eq(variables['MODULE'], ''), eq(variables['SUBCOMMAND'], 'install-qt'))
condition: |
and(
eq( variables['TARGET'], 'desktop' ),
not( startsWith( variables['ARCH'], 'wasm_' ) ),
or(
eq(variables['Agent.OS'], 'Linux'),
eq(variables['Agent.OS'], 'Darwin')
),
eq(variables['MODULE'], ''),
eq(variables['SUBCOMMAND'], 'install-qt')
)
displayName: Build test with qmake for Linux and macOS w/o extra module
- powershell: |
if ( $env:TOOLCHAIN -eq 'MSVC' ) {
@@ -269,7 +288,8 @@ steps:
qmake $(Build.BinariesDirectory)\tests\helloworld
jom
} elseif ( $env:TOOLCHAIN -eq 'MINGW' ) {
python -m aqt install-tool --outputdir $(Build.BinariesDirectory)/Qt $(HOST) desktop tools_mingw qt.tools.$(MINGW_VARIANT)
python -m aqt install-tool $(if (($QT_BASE_MIRROR + "") -ne "") { "-b $QT_BASE_MIRROR" } else {""}) `
--outputdir $(Build.BinariesDirectory)/Qt $(HOST) desktop tools_mingw qt.tools.$(MINGW_VARIANT)
if ($?) {
Write-Host 'Successfully installed tools_mingw'
} else {
@@ -284,8 +304,78 @@ steps:
qmake $(Build.BinariesDirectory)\tests\helloworld
mingw32-make
}
condition: and(eq( variables['Agent.OS'], 'Windows_NT'), eq(variables['MODULE'], ''), eq(variables['SUBCOMMAND'], 'install-qt'))
condition: |
and(
eq(variables['Agent.OS'], 'Windows_NT'),
eq(variables['MODULE'], ''),
eq(variables['SUBCOMMAND'], 'install-qt')
)
displayName: build test with qmake w/o extra module
# When --archives non-empty
- script: |
set -ex
rm -rf $(Build.BinariesDirectory)/tests
mkdir $(Build.BinariesDirectory)/tests
(cd $(Build.BinariesDirectory)/tests && 7zr x $(Build.SourcesDirectory)/ci/helloworld_qttools.7z)
export PATH=$(QT_BINDIR):$PATH
qmake -d $(Build.BinariesDirectory)/tests/helloworld_qttools
make
condition: |
and(
eq( variables['TARGET'], 'desktop' ),
not( startsWith( variables['ARCH'], 'wasm_' ) ),
or(
eq(variables['Agent.OS'], 'Linux'),
eq(variables['Agent.OS'], 'Darwin')
),
contains(variables['SUBARCHIVES'], 'qttools'),
eq(variables['SUBCOMMAND'], 'install-qt')
)
displayName: build test with qmake for Linux and macOS with specific Qt modules (QT += uitools)
- powershell: |
if ( $env:TOOLCHAIN -eq 'MSVC' ) {
# Load modules from cache
$Env:PSModulePath = '$(MODULES_FOLDER)', $Env:PSModulePath -join [System.IO.Path]::PathSeparator
Write-Host $Env:PSModulePath
Import-Module "Pscx"
Import-Module "VSSetup"
Import-VisualStudioVars -VisualStudioVersion $(VSVER) -Architecture $(ARCHITECTURE)
$env:Path += ";$(WIN_QT_BINDIR)"
try { rm -r -fo $(Build.BinariesDirectory)\tests } catch { $Error.Clear() }
mkdir $(Build.BinariesDirectory)\tests
cd $(Build.BinariesDirectory)\tests
7z x $(Build.SourcesDirectory)\ci\helloworld_qttools.7z
qmake -d $(Build.BinariesDirectory)\tests\helloworld_qttools
nmake
} elseif ( $env:TOOLCHAIN -eq 'MINGW' ) {
Set-Item -Path Env:Path -Value ("$(Build.BinariesDirectory)\Qt\Tools\$(MINGW_FOLDER)\bin;$(WIN_QT_BINDIR);" + $Env:Path)
Write-Host "Path == " + $env:Path
if (![bool] (Get-Command -ErrorAction Ignore -Type Application mingw32-make)) {
python -m aqt install-tool $(if (($QT_BASE_MIRROR + "") -ne "") { "-b $QT_BASE_MIRROR" } else {""}) `
--outputdir $(Build.BinariesDirectory)/Qt $(HOST) desktop tools_mingw qt.tools.$(MINGW_VARIANT)
if ($?) {
Write-Host 'Successfully installed tools_mingw'
} else {
throw 'Failed to install tools_mingw'
}
}
try { rm -r -fo $(Build.BinariesDirectory)\tests } catch { $Error.Clear() }
mkdir $(Build.BinariesDirectory)\tests
cd $(Build.BinariesDirectory)\tests
7z x $(Build.SourcesDirectory)\ci\helloworld_qttools.7z
qmake -d $(Build.BinariesDirectory)\tests\helloworld_qttools
mingw32-make
}
condition: |
and(
eq( variables['Agent.OS'], 'Windows_NT'),
contains(variables['SUBARCHIVES'], 'qttools'),
eq(variables['SUBCOMMAND'], 'install-qt')
)
displayName: build test with qmake with specific Qt modules (QT += uitools)
- powershell: |
# Load modules from cache
$Env:PSModulePath = '$(MODULES_FOLDER)', $Env:PSModulePath -join [System.IO.Path]::PathSeparator
@@ -302,7 +392,13 @@ steps:
cd ..
qmake $(Build.BinariesDirectory)\tests\redditclient
nmake
condition: and(eq( variables['Agent.OS'], 'Windows_NT'), eq(variables['TOOLCHAIN'], 'MSVC'), ne(variables['MODULE'], ''), ne(variables['VSVER'], '2019'))
condition: |
and(
eq(variables['Agent.OS'], 'Windows_NT'),
eq(variables['TOOLCHAIN'], 'MSVC'),
ne(variables['MODULE'], ''),
ne(variables['VSVER'], '2019')
)
displayName: build test with qmake with MSVC with extra module
- bash: |
set -ex
@@ -315,27 +411,83 @@ steps:
qmake $(Build.BinariesDirectory)/tests/redditclient
make
condition: |
and(eq( variables['TARGET'], 'desktop'),
or(eq(variables['Agent.OS'], 'Linux'),
eq(variables['Agent.OS'], 'Darwin')),
ne(variables['MODULE'], ''),
eq(variables['SUBCOMMAND'], 'install-qt'))
and(
eq( variables['TARGET'], 'desktop'),
or(
eq(variables['Agent.OS'], 'Linux'),
eq(variables['Agent.OS'], 'Darwin')
),
ne(variables['MODULE'], ''),
eq(variables['SUBCOMMAND'], 'install-qt')
)
displayName: Build test with qmake for Linux and macOS with extra module
##----------------------------------------------------
# wasm_32 on linux and mac
# wasm_32/single/multithread on linux and mac
- script: |
set -ex
git clone https://github.com/emscripten-core/emsdk.git
set -uex
git clone --depth=1 --branch=$(EMSDK_TAG) https://github.com/emscripten-core/emsdk.git
cd emsdk
./emsdk install sdk-fastcomp-1.38.27-64bit
./emsdk activate --embedded sdk-fastcomp-1.38.27-64bit
./emsdk install $(EMSDK_VERSION)
./emsdk activate --embedded $(EMSDK_VERSION)
source $(Build.BinariesDirectory)/emsdk/emsdk_env.sh
mkdir $(Build.BinariesDirectory)/tests
(cd $(Build.BinariesDirectory)/tests; 7zr x $(Build.SourcesDirectory)/ci/openglwindow.7z)
if [[ $(QT_VERSION) = 6* ]]; then
OPENGLWINDOW_7Z="openglwindow_qt6.7z"
else
OPENGLWINDOW_7Z="openglwindow.7z"
fi
(cd $(Build.BinariesDirectory)/tests; 7zr x $(Build.SourcesDirectory)/ci/$OPENGLWINDOW_7Z)
export PATH=$(QT_BINDIR):$PATH
qmake $(Build.BinariesDirectory)/tests/openglwindow
make
workingDirectory: $(Build.BinariesDirectory)
condition: and(eq( variables['ARCH'], 'wasm_32' ), or(eq(variables['Agent.OS'], 'Linux'), eq(variables['Agent.OS'], 'Darwin')))
displayName: 'Build WebAssembler sample project'
condition: |
and(
startsWith( variables['ARCH'], 'wasm_' ),
or(
eq(variables['Agent.OS'], 'Linux'),
eq(variables['Agent.OS'], 'Darwin')
)
)
displayName: 'Build WebAssembler sample project on mac/linux'
# wasm_32/single/multithread on Windows cmd.exe
- powershell: |
git clone --depth=1 --branch=$(EMSDK_TAG) https://github.com/emscripten-core/emsdk.git
cd emsdk
.\emsdk install $(EMSDK_VERSION)
.\emsdk activate --embedded $(EMSDK_VERSION)
.\emsdk_env.bat
mkdir $(Build.BinariesDirectory)\tests
cd $(Build.BinariesDirectory)\tests
$env:Path += ";$(WIN_QT_BINDIR)"
echo "Add Qt/qmake to PATH at $(WIN_QT_BINDIR):"
echo "$env:Path"
if ('$(QT_VERSION)' -like '6*') {
7z x $(Build.SourcesDirectory)\ci\openglwindow_qt6.7z
echo "Inlined qmake.bat command is: $(WIN_AUTODESK_QT_BINDIR)\qmake -qtconf $(WIN_QT_BINDIR)\target_qt.conf $(Build.BinariesDirectory)\tests\openglwindow"
$(WIN_AUTODESK_QT_BINDIR)\qmake.exe -qtconf "$(WIN_QT_BINDIR)\target_qt.conf" $(Build.BinariesDirectory)\tests\openglwindow
} else {
7z x $(Build.SourcesDirectory)\ci\openglwindow.7z
echo "Qt5: run qmake.exe"
qmake $(Build.BinariesDirectory)\tests\openglwindow
}
if ($false -eq $?) {
Write-Error "qmake failed."
Write-Host "##vso[task.logissue type=error]qmake failed."
exit(1)
}
make
if ($false -eq $?) {
Write-Error "make failed."
Write-Host "##vso[task.logissue type=error]nmake failed."
exit(1)
}
workingDirectory: $(Build.BinariesDirectory)
condition: |
and(
startsWith( variables['ARCH'], 'wasm_' ),
eq( variables['Agent.OS'], 'Windows_NT' )
)
displayName: 'Build WebAssembler sample project on windows'

320
docs/CHANGELOG.rst Normal file
View File

@@ -0,0 +1,320 @@
:tocdepth: 1
.. default-role:: any
.. _changes:
==========
ChangeLog
==========
All notable changes to this project will be documented in this file.
`Unreleased`_
=============
`v3.1.10`_ (14, Nov. 2023)
==========================
Fixed
-----
- list_* commands ignore base url setting (#731,#732)
Changed
-------
- chore: support build on git export (#730)
`v3.1.9`_ (6, Nov. 2023)
========================
Security
--------
* CVE-2023-32681: Bump requests@2.31.0 (#724)
Changed
-------
* Remove a specific mirror from fallback (#688)
* add ``debug`` extras for test and check (#725)
* Bump pytest-remotedata@0.4.1
* Bump flake8,flake8-isort@6.0.0 (#726)
* docs: change interpreted text to inline literals (#728)
Added
-----
* macOS binary build (#722)
* ``ignore_hash`` and ``hash_algorithm`` options (#684)
`v3.1.8`_ (1, Nov. 2023)
========================
Changed
-------
- Add 6.5.3 and openssl as known versions (#718)
- Docs: remove deprecated configuration description (#714)
- Test: test on python 3.8, 3.9 and 3.11 (#715)
- Docs: Update documentation for ``--autodesktop`` flag (#713)
- Use 'tar' filter when extracting tarfiles (#707)
- Log a warning when aqtinstall falls back to an external 7z extraction tool (#705)
- Bump py7zr@0.20.6(#702)
Fixed
-----
- Fix failed CI (#716)
- Fix installation of win64_msvc2019_arm64 arch (#711)
- Fix ``test_install`` that fails on Python<3.11.4 (#708)
- Fix failing documentation builds (#706)
- Fix: exception when target path is relative (#702)
`v3.1.7`_ (1, Aug. 2023)
========================
Added
-----
Add support for standalone sdktool installation(#677)
Fixed
-----
- Fixed command to check tools_mingw90 (#680)
- Fixed help text for list-tool
Changed
-------
* Add Qt 6.6.0, 6.5.2 and 6.5.1 as known version(#685,#698)
* Default blacklist setting(#689)
* Add test for sdktool(#678)
`v3.1.6`_ (4, May, 2023)
========================
Added
-----
* Add opensslv3 as known module (#674)
* Add code signature for standalone binary
`v3.1.5`_ (30, Mar. 2023)
=========================
Fixed
-----
* Fix failure to install Qt 6.4.3 source and docs on Windows(#665)
* Fix failed .tar.gz extraction in ``install-src`` and ``install-doc`` (#663)
`v3.1.4`_ (25, Mar. 2023)
=========================
Changed
-------
* Add Qt 6.4.3 as known version(#661)
* Catch OSError(errno.ENOSPC) and PermissionError (#657)
* Update security policy
`v3.1.3`_ (2, Mar. 2023)
========================
Changed
-------
* make the message about "unknown" Qt versions and modules
more friendly and easy to understand (#646,#654)
`v3.1.2`_ (17, Feb. 2023)
=========================
Fixed
-----
* CI: Pin checkout at v3 in all workflows(#649)
* Fix list-qt and install-qt handling of WASM for Qt 6.5.0 (#648)
Changed
-------
* Update combinations.xml (#650)
* Update documentation for ``--autodesktop`` flag (#638)
`v3.1.1`_ (10, Feb. 2023)
=========================
Fixed
-----
* CI: Pin EMSDK version (#641)
* Test: update tox.ini config (#634)
* Fix errors in install-* caused by duplicate modules (#633)
`v3.1.0`_ (5, Dec. 2022)
========================
Fixed
-----
* Support Qt 6.4.1 Android installation (#621,#626,#627)
* Fix URL of Nelson's blog on README
Changed
-------
* Update pyproject.toml and drop setup.cfg
* Standalone binary build with PyInstaller directly(#598)
* Bump dependencies versions
- py7zr>=0.20.2
- flake8<6
- flake8-isort>=4.2.0
* metadata: change link to changelog
* docs: move CHANGELOG.rst into docs/
* Refactoring internals and now check types with mypy
Deprecated
----------
* Drop support for python 3.6
`v3.0.2`_ (26, Oct. 2022)
=========================
* Fix installation of Qt6/WASM arch on windows (#583,#584)
* Docs: allow localization (#588)
* Docs: Add Japanese translation (#595)
`v3.0.1`_ (30, Sep. 2022)
=========================
* Actions: Fix standalone executable upload (#581)
* Actions: Bump versions (#579)
- pypa/gh-action-pypi-publish@v1
- actions/setup-python@v4
`v3.0.0`_ (29, Sep. 2022)
=========================
Added
-----
* Automatically install desktop qt when required for android/ios qt installations(#540)
Fixed
-----
* Tolerate empty DownloadArchive tags while parsing XML(#563)
* Fix standalone executable build for windows (#565,#567)
Changed
-------
* Update Security policy
* Update combinations.json(#566)
* CI: now test on MacOS 12(#541)
`v2.2.3`_ (17, Aug. 2022)
=========================
Fixed
-----
* Building standalone executable: aqt.exe (#556,#557)
Added
-----
* Docs: add explanation of ``list-qt --long-modules`` (#555)
`v2.2.2`_ (11, Aug. 2022)
=========================
Added
-----
* Add ``aqt list-qt --long-modules`` (#543,#547)
Fixed
-----
* Fix kwargs passed up AqtException inheritance tree (#550)
`v2.2.1`_ (9, Aug. 2022)
------------------------
Changed
-------
* ``install-qt`` command respect ``--base`` argument option when
retrieve metadata XML files by making ``MetadataFactory``
respect ``baseurl`` set. (#545)
`v2.2.0`_ (2, Aug. 2022)
========================
Added
-----
* Add code of conduct (#535)
Changed
-------
* test: prevent use of flake8@5.0 (#544)
* Improve tox and pytest config(#544)
* Properly retrieve folder names from html pages of all mirrors(#520)
* Log: left align the level name (#539)
* Update combinations (#537)
* Introduce Updates.xml data class and parser (#533)
* archives: do not keep update.xml text in field (#534)
* docs: Bump sphinx@5.0 (#524)
Fixed
-----
* Update readthedocs config (#535)
* Fix readme description of list-qt (#527)
Deprecated
----------
* Deprecate setup.py file (#531)
`v2.1.0`_ (14, Apr. 2022)
=========================
Changed
-------
* Change security policy(#506):
Supported 2.0.x
Unsupported 1.2.x and before
* Bump py7zr@0.18.3(#509)
* pyproject.toml configuration
* project section(#507)
* setuptools_scm settings(#508)
* Use SHA256 hash from trusted mirror for integrity check (#493)
* Update combinations.xml
* QtDesignStudio generation2 (#486)
* IFW version (from 42 to 43) change (#495)
* Support Qt 6.2.4 (#502)
* Update fallback mirror list (#485)
Fixed
-----
* Fix patching of Qt6.2.2-ios(#510, #503)
* Test: Conditionally install dependencies on Ubuntu (#494)
Added
-----
* doc: warn about unrelated aqt package (#490)
* doc: add explanation of --config flag in CLI docs (#491)
* doc: note about MSYS2/Mingw64 environment
Security
--------
* Use secrets for secure random numbers(#498)
* Use defusedxml to parse Updates.xml file to avoid attack(#498)
* Improve get_hash function(#504)
* Check Update.xml file with SHA256 hash (#493)
.. _Unreleased: https://github.com/miurahr/aqtinstall/compare/v3.1.10...HEAD
.. _v3.1.10: https://github.com/miurahr/aqtinstall/compare/v3.1.9...v3.1.10
.. _v3.1.9: https://github.com/miurahr/aqtinstall/compare/v3.1.8...v3.1.9
.. _v3.1.8: https://github.com/miurahr/aqtinstall/compare/v3.1.7...v3.1.8
.. _v3.1.7: https://github.com/miurahr/aqtinstall/compare/v3.1.6...v3.1.7
.. _v3.1.6: https://github.com/miurahr/aqtinstall/compare/v3.1.5...v3.1.6
.. _v3.1.5: https://github.com/miurahr/aqtinstall/compare/v3.1.4...v3.1.5
.. _v3.1.4: https://github.com/miurahr/aqtinstall/compare/v3.1.3...v3.1.4
.. _v3.1.3: https://github.com/miurahr/aqtinstall/compare/v3.1.2...v3.1.3
.. _v3.1.2: https://github.com/miurahr/aqtinstall/compare/v3.1.1...v3.1.2
.. _v3.1.1: https://github.com/miurahr/aqtinstall/compare/v3.1.0...v3.1.1
.. _v3.1.0: https://github.com/miurahr/aqtinstall/compare/v3.0.2...v3.1.0
.. _v3.0.2: https://github.com/miurahr/aqtinstall/compare/v3.0.1...v3.0.2
.. _v3.0.1: https://github.com/miurahr/aqtinstall/compare/v3.0.0...v3.0.1
.. _v3.0.0: https://github.com/miurahr/aqtinstall/compare/v2.2.3...v3.0.0
.. _v2.2.3: https://github.com/miurahr/aqtinstall/compare/v2.2.2...v2.2.3
.. _v2.2.2: https://github.com/miurahr/aqtinstall/compare/v2.2.1...v2.2.2
.. _v2.2.1: https://github.com/miurahr/aqtinstall/compare/v2.2.0...v2.2.1
.. _v2.2.0: https://github.com/miurahr/aqtinstall/compare/v2.1.0...v2.2.0
.. _v2.1.0: https://github.com/miurahr/aqtinstall/compare/v2.0.6...v2.1.0

View File

@@ -140,8 +140,8 @@ Community Impact Guidelines were inspired by `Mozilla's code of conduct enforcem
For answers to common questions about this code of conduct, see the `FAQ`_ or its translations_.
.. _`Contributor Covenant`: https://www.contributor-covenant.org/version/2/0/code_of_conduct.html
.. _`Contributor Covenant`: https://www.contributor-covenant.org/version/2/0/code_of_conduct/
.. _`homepage`: https://www.contributor-covenant.org
.. _`Mozilla's code of conduct enforcement ladder`: https://github.com/mozilla/diversity
.. _`Mozilla's code of conduct enforcement ladder`: https://github.com/mozilla/inclusion
.. _`FAQ`: https://www.contributor-covenant.org/faq
.. _`translations`: https://www.contributor-covenant.org/translations

View File

@@ -7,11 +7,11 @@ Supported Versions
+---------+---------------------+
| Version | Status |
+=========+=====================+
| 2.1.x | Stable version |
| 3.1.x | Stable version |
+---------+---------------------+
| 2.0.x | Security fixes only |
| 3.0.x | Security fixes only |
+---------+---------------------+
| < 2.0 | not supported |
| < 3.0 | not supported |
+---------+---------------------+
Reporting a Vulnerability

View File

@@ -14,26 +14,29 @@ David also leads many developments and reviews effort after 2.0.
All contributors, listed alphabetically, are:
* Alberto Mardegan(ignore_hash option)
* Andrei Yankovich (tools ifw installation)
* Aurélien Gâteau (patching to qmake)
* Benjamin O (Github Actions and more)
* Christian Hoffmann (Update mirror list)
* David Dalcino (Many improvements on CI automations, List commands, tests, documents and so on)
* David Dalcino (Many improvements on CI automations, commands, tests, documents and so on)
* Doronin Stanislav (document)
* Fabrice Le Bars (32bit binary)
* Felix Barz (Android, Explicit extra module installation)
* Gamso (improve parsing of update.xml)
* Julien Marrec (mypy, type hints)
* Kyle Altendorf (7z binary path search)
* lightmare (Documents)
* Mike Tzou (Update fallback url)
* @lebarsfa (ignore_hash/hash_algorithm options)
* @lightmare (Documents)
* Martin Delille (Documents)
* Mike Tzou (Update fallback url)
* mite-user (folder index handling of download web sites)
* Mizux Seihax (Qt versions)
* Mozi (CI/workflow improvement, log format)
* Nelson Chen (CI tests)
* @nikitalita (Binary distribution)
* @pylipp (Documents)
* @Steveice10 (MacOS binary build)
* Sztergbaum Roman (Version database)
* Thomas Grainger (CLI entry point)
* @tsteven4 (fix patching to qmake, pkgconfig and libtool)

View File

@@ -42,17 +42,15 @@ list-qt command
aqt list-qt [-h | --help]
[-c | --config]
[--extension <extension>]
[--spec <specification>]
[--modules (<Qt version> | latest) <architecture> |
--long-modules (<Qt version> | latest) <architecture> |
--extensions (<Qt version> | latest) |
--arch (<Qt version> | latest) |
--archives (<Qt version> | latest) architecture [modules...]
--latest-version]
<host> [<target>]
List available versions of Qt, targets, extensions, modules, and architectures.
List available versions of Qt, targets, modules, and architectures.
.. describe:: host
@@ -68,21 +66,6 @@ List available versions of Qt, targets, extensions, modules, and architectures.
Display help text
.. option:: --extension <Extension>
Extension of packages to list
{wasm,src_doc_examples,preview,wasm_preview,x86_64,x86,armv7,arm64_v8a}
Use the ``--extensions`` flag to list all relevant options for a host/target.
Incompatible with the ``--extensions`` flag, but may be combined with any other flag.
.. option:: --extensions (<Qt version> | latest)
Qt version in the format of "5.X.Y", or the keyword ``latest``.
When set, this prints all valid arguments for the ``--extension`` flag for
Qt 5.X.Y, or the latest version of Qt if ``latest`` is specified.
Incompatible with the ``--extension`` flag.
.. option:: --spec <Specification>
Print versions of Qt within a `SimpleSpec`_ that specifies a range of versions.
@@ -98,7 +81,7 @@ List available versions of Qt, targets, extensions, modules, and architectures.
.. option:: --modules (<Qt version> | latest) <architecture>
This flag lists all the modules available for Qt 5.X.Y with a host/target/extension/architecture
This flag lists all the modules available for Qt 5.X.Y with a host/target/architecture
combination, or the latest version of Qt if ``latest`` is specified.
You can list available architectures by using ``aqt list-qt`` with the
``--arch`` flag described below.
@@ -149,7 +132,7 @@ List available versions of Qt, targets, extensions, modules, and architectures.
.. option:: --arch (<Qt version> | latest)
Qt version in the format of "5.X.Y". When set, this prints all architectures
available for Qt 5.X.Y with a host/target/extension, or the latest version
available for Qt 5.X.Y with a host/target, or the latest version
of Qt if ``latest`` is specified.
.. _`list archives flag`:
@@ -174,7 +157,7 @@ List available versions of Qt, targets, extensions, modules, and architectures.
.. option:: --latest-version
Print only the newest version available
May be combined with the ``--extension`` and/or ``--spec`` flags.
May be combined with the ``--spec`` flag.
.. _list-src command:
@@ -404,7 +387,7 @@ are described here:
.. _py7zr: https://pypi.org/project/py7zr/
.. _7-zip: https://www.7-zip.org/
.. _Choco: https://community.chocolatey.org/packages/7zip/19.0
.. _Choco: https://community.chocolatey.org/packages/7zip/
.. _brew: https://formulae.brew.sh/formula/p7zip
.. option:: --internal
@@ -510,6 +493,7 @@ install-qt command
[-d | --archive-dest] <path>
[-m | --modules (all | <module> [<module>...])]
[--archives <archive> [<archive>...]]
[--autodesktop]
[--noarchives]
<host> <target> (<Qt version> | <spec>) [<arch>]
@@ -523,6 +507,8 @@ There are various combinations to accept according to Qt version.
.. describe:: target
desktop, ios, winrt, or android. The type of device for which you are developing Qt programs.
If your target is ios, please be aware that versions of Qt older than 6.2.4 are expected to be
non-functional with current versions of XCode (applies to any XCode greater than or equal to 13).
.. describe:: Qt version
@@ -557,6 +543,13 @@ There are various combinations to accept according to Qt version.
Use the :ref:`List-Qt Command` to list available architectures.
.. option:: --autodesktop
If you are installing an ios, android, WASM, or msvc_arm64 version of Qt6,
the corresponding desktop version of Qt must be installed alongside of it.
Turn this option on to install it automatically.
This option will have no effect if the desktop version of Qt is not required.
.. option:: --noarchives
[Advanced] Specify not to install all base packages.
@@ -796,12 +789,12 @@ Command examples
.. program:: None
Example: Installing Qt SDK 5.12.0 for Linux with QtCharts and QtNetworkAuth:
Example: Installing Qt SDK 5.12.12 for Linux with QtCharts and QtNetworkAuth:
.. code-block:: console
pip install aqtinstall
sudo aqt install-qt --outputdir /opt linux desktop 5.12.0 -m qtcharts qtnetworkauth
sudo aqt install-qt --outputdir /opt linux desktop 5.12.12 -m qtcharts qtnetworkauth
Example: Installing the newest LTS version of Qt 5.12:
@@ -812,11 +805,18 @@ Example: Installing the newest LTS version of Qt 5.12:
sudo aqt install-qt linux desktop 5.12 win64_mingw73
Example: Installing Android (armv7) Qt 5.10.2:
Example: Installing Android (armv7) Qt 5.13.2:
.. code-block:: console
aqt install-qt linux android 5.10.2 android_armv7
aqt install-qt linux android 5.13.2 android_armv7
Example: Installing Android (armv7) Qt 6.4.2:
.. code-block:: console
aqt install-qt linux android 6.4.2 android_armv7 --autodesktop
Example: Install examples, doc and source:
@@ -849,6 +849,13 @@ Example: Install Web Assembly
aqt install-qt linux desktop 5.15.0 wasm_32
Example: Install Qt6 for Web Assembly
.. code-block:: console
aqt install-qt linux desktop 6.2.4 wasm_32 --autodesktop
Example: List available versions of Qt on Linux
.. code-block:: console
@@ -912,18 +919,34 @@ Example: Install vcredist on Windows:
.. code-block:: doscon
aqt install-tool windows tools_vcredist
aqt install-tool windows desktop tools_vcredist
.\Qt\Tools\vcredist\vcredist_msvc2019_x64.exe /norestart /q
Example: Install MinGW on Windows
Example: Install MinGW 8.1.0 on Windows:
.. code-block:: doscon
aqt install-tool -O c:\Qt windows tools_mingw qt.tools.win64_mingw810
aqt install-tool -O c:\Qt windows desktop tools_mingw qt.tools.win64_mingw810
set PATH=C:\Qt\Tools\mingw810_64\bin
Example: Install MinGW 11.2.0 on Windows:
.. code-block:: doscon
aqt install-tool -O c:\Qt windows desktop tools_mingw90
set PATH=C:\Qt\Tools\mingw1120_64\bin
.. note::
This is not a typo; it is a mislabelled tool name!
``tools_mingw90`` and the tool variant ``qt.tools.win64_mingw900``
do not contain MinGW 9.0.0; they actually contain MinGW 11.2.0!
Verify with ``aqt list-tool --long windows desktop tools_mingw90``
in a wide terminal.
Example: Show help message
.. code-block:: console

View File

@@ -55,7 +55,7 @@ master_doc = 'index'
# General information about the project.
project = u'aqtinstall'
copyright = u'2019-2021, Hiroshi Miura'
copyright = u'2019-2023, Hiroshi Miura'
author = u'Hiroshi Miura'
# The version info for the project you're documenting, acts as replacement for
@@ -299,3 +299,5 @@ extlinks = {'issue': ('https://github.com/miurahr/aqtinstall/issues/%s',
linkcheck_ignore = [r'https://github.com/miurahr/aqtinstall/compare/.+',
'http://mirrors.tuna.tsinghua.edu.cn',
'http://mirrors.geekpie.club/']
locale_dirs=['locale/']

View File

@@ -31,6 +31,8 @@ A file is like as follows:
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
[mirrors]
trusted_mirrors:
@@ -97,7 +99,7 @@ min_module_size:
and they are exactly 40 bytes when uncompressed.
The authors feel that it is not useful for ``aqt list-*`` to list these empty modules.
If you want to print these modules with ``aqt list-*``, please feel free to change
the `min_module_size` value to something less than 40.
the ``min_module_size`` value to something less than 40.
This setting has no effect on your ability to install these modules.
``aqt install-*`` can will still install them without any warnings.
@@ -130,6 +132,18 @@ max_retries_on_checksum_error:
This setting controls how many times ``aqt`` will attempt to download a file,
in the case of a checksum error.
hash_algorithm:
This is either ``sha256``, ``sha1`` or ``md5``. ``sha256`` is the only safe
value to use here. Default is ``sha256`` if not set.
See also ``trusted_mirrors`` setting.
INSECURE_NOT_FOR_PRODUCTION_ignore_hash:
This is either ``True`` or ``False``.
The ``True`` setting disables hash checking when downloading files. Although
this is not recommended, this may help when hashes are not available.
The ``False`` setting will enforce hash checking. This is highly recommended
to avoid corrupted files.
The ``[mirrors]`` section is a configuration for mirror handling.
@@ -156,8 +170,8 @@ blacklist:
Some mirror sites ignore a connection from IP addresses out of their preffered one.
It will cause connection error or connection timeout.
There are some known mirror sites in default.
When you are happy with the default sites,
you can override with your custom settings.
If you are not happy with the default sites,
you can override them with custom settings.
fallbacks:
It is a list of URL where is a good for access.

View File

@@ -75,7 +75,7 @@ Qt 6.2.0 for Windows Desktop. To do this, we can use :ref:`aqt list-qt <list-qt
.. code-block:: console
$ aqt list-qt windows desktop --arch 6.2.0
win64_mingw81 win64_msvc2019_64 win64_msvc2019_arm64
win64_mingw81 win64_msvc2019_64 win64_msvc2019_arm64 wasm_32
Notice that this is a very small subset of the architectures listed in the
`Available Qt versions`_ wiki page. If we need to use some architecture that
@@ -83,7 +83,7 @@ is not on this list, we can use the `Available Qt versions`_ wiki page to get
a rough idea of what versions support the architecture we want, and then use
:ref:`aqt list-qt <list-qt command>` to confirm that the architecture is available.
Let's say that we want to install Qt 6.2.0 with architecture `win64_mingw81`.
Let's say that we want to install Qt 6.2.0 with architecture ``win64_mingw81``.
The installation command we need is:
.. code-block:: console
@@ -120,7 +120,7 @@ installed by default, using this command:
$ aqt install-qt linux desktop 6.2.0 gcc_64 --external 7z
.. _py7zr: https://pypi.org/project/py7zr/
.. _p7zip: http://p7zip.sourceforge.net/
.. _p7zip: https://p7zip.sourceforge.net/
.. _7-zip: https://www.7-zip.org/
Changing the output directory
@@ -128,7 +128,7 @@ Changing the output directory
By default, ``aqt`` will install all of the Qt packages into the current
working directory, in the subdirectory ``./<Qt version>/<arch>/``.
For example, if we install Qt 6.2.0 for Windows desktop with arch `win64_mingw81`,
For example, if we install Qt 6.2.0 for Windows desktop with arch ``win64_mingw81``,
it would end up in ``./6.2.0/win64_mingw81``.
If you would prefer to install it to another location, you
@@ -160,6 +160,8 @@ combination, so we will need to supply :ref:`aqt list-qt <list-qt command>` with
qtcharts qtdatavis3d qtlottie qtnetworkauth qtpurchasing qtquick3d
qtquicktimeline qtscript qtvirtualkeyboard qtwebengine qtwebglplugin
.. _long_modules explanation:
Let's say that we want to know more about these modules before we install them.
We can use the ``--long-modules`` flag for that:
@@ -182,10 +184,30 @@ We can use the ``--long-modules`` flag for that:
Note that if your terminal is wider than 95 characters, this command will show
release dates and sizes in extra columns to the right.
If you try this, you will notice that `debug_info` is 5.9 gigabytes installed.
If you try this, you will notice that ``debug_info`` is 5.9 gigabytes installed.
Let's say that we want to install `qtcharts` and `qtnetworkauth`.
We can do that by using the `-m` flag with the :ref:`aqt install-qt <qt installation command>` command.
Also, notice that the 'Display Name' indicates which compiler the module is
intended to be used with. In this case, for the architecture ``win64_mingw81``,
you will most likely want to use the "MinGW 8.1.0 64-bit" compiler.
Here's what the command prints when you use it with the ambiguously-named
``win64_mingw`` architecture:
.. code-block:: console
$ python -m aqt list-qt windows desktop --long-modules 6.2.4 win64_mingw
Module Name Display Name
=======================================================================
debug_info Desktop MinGW 11.2.0 64-bit debug information files
qt3d Qt 3D for MinGW 11.2.0 64-bit
qt5compat Qt 5 Compatibility Module for MinGW 11.2.0 64-bit
qtactiveqt Qt 3D for MinGW 11.2.0 64-bit
qtcharts Qt Charts for MinGW 11.2.0 64-bit
...
You can find out how to install MinGW 8.1.0 and 11.2.0 in the `Installing Tools`_ section.
Let's say that we want to install ``qtcharts`` and ``qtnetworkauth``.
We can do that by using the ``-m`` flag with the :ref:`aqt install-qt <qt installation command>` command.
This flag receives the name of at least one module as an argument:
.. code-block:: console
@@ -213,8 +235,8 @@ The ``xargs`` equivalent to this command is an exercise left to the reader.
If you want to install all available modules, you are probably better off using
the ``all`` keyword, as discussed above. This scripting example is presented to
give you a sense of how to accomplish something more complicated.
Perhaps you want to install all modules except `qtnetworkauth`; you could write a script
that removes `qtnetworkauth` from the output of :ref:`aqt list-qt <list-qt command>`,
Perhaps you want to install all modules except ``qtnetworkauth``; you could write a script
that removes ``qtnetworkauth`` from the output of :ref:`aqt list-qt <list-qt command>`,
and pipe that into :ref:`aqt install-qt <qt installation command>`.
This exercise is left to the reader.
@@ -222,106 +244,61 @@ This exercise is left to the reader.
Installing Qt for Android
-------------------------
Let's install Qt for Android. Installing Qt 5 will be similar to installing Qt
for Desktop on Windows, but there will be differences when we get to Qt 6.
Let's install Qt for Android. This will be similar to installing Qt for Desktop on Windows.
.. note::
Versions of aqtinstall older than 3.1.0 required the use of the ``--extensions`` and
``--extension`` flag to list any architectures, modules, or archives for Qt 6 and above.
These flags are no longer necessary, so please do not use them.
.. code-block:: console
$ aqt list-qt windows android # Print Qt versions available
5.9.0 5.9.1 ...
...
6.2.0
6.4.0
$ aqt list-qt windows android --arch 5.15.2 # Print architectures available
android
$ aqt list-qt windows android --arch 6.2.4 # Print architectures available
android_x86_64 android_armv7 android_x86 android_arm64_v8a
$ aqt list-qt windows android --modules 5.15.2 android # Print modules available
qtcharts qtdatavis3d qtlottie qtnetworkauth qtpurchasing qtquick3d qtquicktimeline qtscript
$ aqt list-qt windows android --modules 6.2.4 android_armv7 # Print modules available
qt3d qt5compat qtcharts qtconnectivity qtdatavis3d ...
$ aqt install-qt windows android 5.15.2 android -m qtcharts qtnetworkauth # Install
$ aqt install-qt windows android 6.2.4 android_armv7 -m qtcharts qtnetworkauth # Install
Let's see what happens when we try to list architectures and modules for Qt 6:
Please note that when you install Qt6 for android or ios, the installation will not
be functional unless you install the corresponding desktop version of Qt alongside it.
You can do this automatically with the ``--autodesktop`` flag:
.. code-block:: console
$ aqt list-qt windows android --arch 6.2.0 # Print architectures available
Command line input error: Qt 6 for Android requires one of the following extensions:
('x86_64', 'x86', 'armv7', 'arm64_v8a').
Please add your extension using the `--extension` flag.
$ aqt list-qt windows android --modules 6.2.0 android_armv7 # Print modules available
Command line input error: Qt 6 for Android requires one of the following extensions:
('x86_64', 'x86', 'armv7', 'arm64_v8a').
Please add your extension using the `--extension` flag.
The Qt 6 for Android repositories are a little different than the Qt 5 repositories,
and the :ref:`aqt list-qt <list-qt command>` tool doesn't know where to look for modules and architectures
if you don't tell it what architecture you need. I know, it sounds a little
backwards, but that's how the Qt repo was put together.
There are four architectures available, and the error message from :ref:`aqt list-qt <list-qt command>`
just told us what they are: `x86_64`, `x86`, `armv7`, and `arm64_v8a`.
We know we want to use `armv7` for the architecture, but we don't know exactly
what value for 'architecture' we need to pass to :ref:`aqt install-qt <qt installation command>`
yet, so we will use :ref:`aqt list-qt <list-qt command>` again:
.. code-block:: console
$ aqt list-qt windows android --extension armv7 --arch 6.2.0
android_armv7
You should be thinking, "Well, that was silly. All it did was add `android_` to
the beginning of the architecture I gave it. Why do I need to use
``aqt list-qt --arch`` for that?" The answer is, ``aqt list-qt --arch`` is
checking to see what actually exists in the Qt repository. If it prints an error
message, instead of the obvious `android_armv7`, we would know that Qt 6.2.0
for that architecture doesn't exist for some reason, and any attempt to install
it with :ref:`aqt install-qt <qt installation command>` will fail.
If we want to install Qt 6.2.0 for armv7, we use this command to print available modules:
.. code-block:: console
$ aqt list-qt windows android --extension armv7 --modules 6.2.0 android_armv7
qt3d qt5compat qtcharts qtconnectivity qtdatavis3d qtimageformats qtlottie
qtmultimedia qtnetworkauth qtpositioning qtquick3d qtquicktimeline
qtremoteobjects qtscxml qtsensors qtserialbus qtserialport qtshadertools
qtvirtualkeyboard qtwebchannel qtwebsockets qtwebview
Finally, let's install Qt 6.2.0 for Android armv7 with the ``qtcharts`` and
``qtnetworkauth`` modules:
.. code-block:: console
$ aqt install-qt linux android 6.2.0 android_armv7 -m qtcharts qtnetworkauth
$ aqt install-qt linux android 6.2.4 android_armv7 -m qtcharts qtnetworkauth --autodesktop
Installing Qt for WASM
----------------------
To find out how to install Qt for WASM, we need to tell :ref:`aqt list-qt <list-qt command>` that we are
using the `wasm` architecture. We can do that by using the ``--extension wasm`` flag.
To find out how to install Qt for WASM, we will need to use the ``wasm_32`` architecture.
We can find out whether or not that architecture is available for our version of Qt with the
``--arch`` flag.
.. code-block:: console
$ aqt list-qt windows desktop --extension wasm
5.13.1 5.13.2
5.14.0 5.14.1 5.14.2
5.15.0 5.15.1 5.15.2
$ python -m aqt list-qt windows desktop --arch 6.1.3
win64_mingw81 win64_msvc2019_64
$ python -m aqt list-qt windows desktop --arch 6.2.0
win64_mingw81 win64_msvc2019_64 win64_msvc2019_arm64 wasm_32
There are only a few versions of Qt that support WASM, and they are only available
for desktop targets. If we tried this command with `android`, `winrt`, or `ios`
targets, we would have seen an error message.
Not every version of Qt supports WASM. This command shows us that we cannot use WASM with Qt 6.1.3.
We can check the architecture and modules available as before:
Please note that the WASM architecture for Qt 6.5.0+ changed from ``wasm_32`` to ``wasm_singlethread`` and
``wasm_multithread``. Always use ``aqt list-qt`` to check what architectures are available for the desired version of Qt.
We can check the modules available as before:
.. code-block:: console
$ aqt list-qt windows desktop --extension wasm --arch 5.15.2 # available architectures
wasm_32
$ aqt list-qt windows desktop --extension wasm --modules 5.15.2 wasm_32 # available modules
$ aqt list-qt windows desktop --modules 5.15.2 wasm_32 # available modules
qtcharts qtdatavis3d qtlottie qtnetworkauth qtpurchasing qtquicktimeline qtscript
qtvirtualkeyboard qtwebglplugin
@@ -331,6 +308,14 @@ We can install Qt for WASM as before:
$ aqt install-qt windows desktop 5.15.2 wasm_32 -m qtcharts qtnetworkauth
Please note that when you install Qt for WASM version 6 and above, the installation will not
be functional unless you install a non-WASM desktop version of Qt alongside it.
You can do this automatically with the ``--autodesktop`` flag:
.. code-block:: console
$ aqt install-qt linux desktop 6.2.0 wasm_32 -m qtcharts qtnetworkauth --autodesktop
Installing Tools
----------------
@@ -350,11 +335,12 @@ Let's find out what tools are available for Windows Desktop by using the
tools_openssl_src
tools_ninja
tools_mingw
tools_mingw90
tools_ifw
tools_conan
tools_cmake
Let's see what tool variants are available in `tools_mingw`:
Let's see what tool variants are available in ``tools_mingw``:
.. code-block:: console
@@ -392,31 +378,55 @@ Let's see some more details, using the ``-l`` or ``--long`` flag:
qt.tools.win64_mingw810 8.1.0-1-202004170606 2020-04-17
The ``-l`` flag causes :ref:`aqt list-tool <list-tool command>` to print a table
that shows plenty of data pertinent to each tool variant available in `tools_mingw`.
that shows plenty of data pertinent to each tool variant available in ``tools_mingw``.
:ref:`aqt list-tool <list-tool command>` additionally prints the 'Display Name'
and 'Description' for each tool if your terminal is wider than 95 characters;
terminals that are narrower than this cannot display this table in a readable way.
Now let's install `mingw`, using the :ref:`aqt install-tool <tools installation command>` command.
Please be aware that the tool ``tools_mingw90`` appears to be mislabelled:
.. code-block:: console
$ aqt list-tool windows desktop tools_mingw90 -l
Tool Variant Name Version Release Date
=============================================================
qt.tools.win64_mingw900 9.0.0-1-202203221220 2022-03-22
$ aqt list-tool windows desktop tools_mingw90 -l
Tool Variant Name Version Release Date Display Name Description
============================================================================================================
qt.tools.win64_mingw900 9.0.0-1-202203221220 2022-03-22 MinGW 11.2.0 64-bit MinGW-builds 11.2.0
64-bit toolchain with
gcc 11.2.0
The 'narrow display' for ``tools_mingw90`` cuts off the two columns of the table that
show you what's really in that package: ``MinGW 11.2.0 64-bit``.
If you are using the ``win64_mingw`` architecture for Qt 6.2.2+, then this is
probably the compiler you want to install (see `long_modules explanation`_).
Now let's install ``mingw``, using the :ref:`aqt install-tool <tools installation command>` command.
This command receives four parameters:
1. The host operating system (windows, mac, or linux)
2. The target SDK (desktop, android, ios, or winrt)
3. The name of the tool (this is `tools_mingw` in our case)
3. The name of the tool (this is ``tools_mingw`` in our case)
4. (Optional) The tool variant name. We saw a list of these when we ran
:ref:`aqt list-tool <list-tool command>` with the `tool name` argument filled in.
:ref:`aqt list-tool <list-tool command>` with the ``tool name`` argument filled in.
To install `mingw`, you could use this command (please don't):
To install ``mingw``, you could use this command (please don't):
.. code-block:: console
$ aqt install-tool windows desktop tools_mingw # please don't run this!
Using this command will install every tool variant available in `tools_mingw`;
Using this command will install every tool variant available in ``tools_mingw``;
in this case, you would install 10 different versions of the same tool.
For some tools, like `qtcreator` or `ifw`, this is an appropriate thing to do,
For some tools, like ``qtcreator`` or ``ifw``, this is an appropriate thing to do,
since each tool variant is a different program.
However, for tools like `mingw` and `vcredist`, it would make more sense to use
However, for tools like ``mingw`` and ``vcredist``, it would make more sense to use
:ref:`aqt list-tool <list-tool command>` to see what tool variants are available,
and then install just the tool variant you are interested in, like this:
@@ -446,7 +456,7 @@ reduce the footprint of your Qt installation.
.. note::
Be careful about using the ``--archives`` flag; it is marked `Advanced` for a reason!
Be careful about using the ``--archives`` flag; it is marked ``Advanced`` for a reason!
It is very easy to misuse this command and end up with a Qt installation that
is missing the components that you need.
Don't use it unless you know what you are doing!

View File

@@ -14,7 +14,8 @@ Contents:
CODE_OF_CONDUCT
SECURITY
authors
changes
CHANGELOG
previous_changes
Indices and tables
==================

View File

@@ -8,16 +8,15 @@ Installation
Requirements
------------
- Minimum Python version: 3.6
- Recommended Python version: 3.7.5 or later
- Minimum Python version: 3.7.5
- Dependent libraries: requests, py7zr, semantic_version, patch, texttable, bs4
- Dependencies: requests, py7zr, semantic_version, patch, texttable, bs4, defusedxml, humanize
Install by pip command
----------------------
Same as usual, it can be installed with `pip`
Same as usual, it can be installed with ``pip``
.. code-block:: bash

View File

@@ -0,0 +1,270 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2019-2021, Hiroshi Miura
# This file is distributed under the same license as the aqtinstall package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2022.
#
msgid ""
msgstr "Project-Id-Version: aqtinstall 3.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-10-09 22:56+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.8.0\n"
#: ../../CODE_OF_CONDUCT.rst:3
msgid "Contributor Covenant Code of Conduct"
msgstr "Contributor Covenant Code of Conduct"
#: ../../CODE_OF_CONDUCT.rst:6
msgid "Our Pledge"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:8
msgid ""
"We as members, contributors, and leaders pledge to make participation in "
"our community a harassment-free experience for everyone, regardless of "
"age, body size, visible or invisible disability, ethnicity, sex "
"characteristics, gender identity and expression, level of experience, "
"education, socio-economic status, nationality, personal appearance, race,"
" religion, or sexual identity and orientation."
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:15
msgid ""
"We pledge to act and interact in ways that contribute to an open, "
"welcoming, diverse, inclusive, and healthy community."
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:19
msgid "Our Standards"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:21
msgid ""
"Examples of behavior that contributes to a positive environment for our "
"community include:"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:24
msgid "Demonstrating empathy and kindness toward other people"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:25
msgid "Being respectful of differing opinions, viewpoints, and experiences"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:26
msgid "Giving and gracefully accepting constructive feedback"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:27
msgid ""
"Accepting responsibility and apologizing to those affected by our "
"mistakes, and learning from the experience"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:29
msgid ""
"Focusing on what is best not just for us as individuals, but for the "
"overall community"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:32
msgid "Examples of unacceptable behavior include:"
msgstr "Examples of unacceptable behavior include:"
#: ../../CODE_OF_CONDUCT.rst:34
msgid ""
"The use of sexualized language or imagery, and sexual attention or "
"advances of any kind"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:36
msgid ""
"Trolling, insulting or derogatory comments, and personal or political "
"attacks"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:37
msgid "Public or private harassment"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:38
msgid ""
"Publishing others' private information, such as a physical or email "
"address, without their explicit permission"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:40
msgid ""
"Other conduct which could reasonably be considered inappropriate in a "
"professional setting"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:44
msgid "Enforcement Responsibilities"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:46
msgid ""
"Community leaders are responsible for clarifying and enforcing our "
"standards of acceptable behavior and will take appropriate and fair "
"corrective action in response to any behavior that they deem "
"inappropriate, threatening, offensive, or harmful."
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:51
msgid ""
"Community leaders have the right and responsibility to remove, edit, or "
"reject comments, commits, code, wiki edits, issues, and other "
"contributions that are not aligned to this Code of Conduct, and will "
"communicate reasons for moderation decisions when appropriate."
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:57
msgid "Scope"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:59
msgid ""
"This Code of Conduct applies within all community spaces, and also "
"applies when an individual is officially representing the community in "
"public spaces. Examples of representing our community include using an "
"official e-mail address, posting via an official social media account, or"
" acting as an appointed representative at an online or offline event."
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:66
msgid "Enforcement"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:68
msgid ""
"Instances of abusive, harassing, or otherwise unacceptable behavior may "
"be reported to the community leaders responsible for enforcement at "
"Hiroshi Miura <miurahr@linux.com>. All complaints will be reviewed and "
"investigated promptly and fairly."
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:73
msgid ""
"All community leaders are obligated to respect the privacy and security "
"of the reporter of any incident."
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:77
msgid "Enforcement Guidelines"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:79
msgid ""
"Community leaders will follow these Community Impact Guidelines in "
"determining the consequences for any action they deem in violation of "
"this Code of Conduct:"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:83
msgid "Phase 1. Correction"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:87 ../../CODE_OF_CONDUCT.rst:98
#: ../../CODE_OF_CONDUCT.rst:112 ../../CODE_OF_CONDUCT.rst:127
msgid "**Community Impact**:"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:86
msgid ""
"Use of inappropriate language or other behavior deemed unprofessional or "
"unwelcome in the community."
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:92 ../../CODE_OF_CONDUCT.rst:106
#: ../../CODE_OF_CONDUCT.rst:119 ../../CODE_OF_CONDUCT.rst:131
msgid "**Consequence**:"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:90
msgid ""
"A private, written warning from community leaders, providing clarity "
"around the nature of the violation and an explanation of why the behavior"
" was inappropriate. A public apology may be requested."
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:95
msgid "Phase 2. Warning"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:98
msgid "A violation through a single incident or series of actions."
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:101
msgid ""
"A warning with consequences for continued behavior. No interaction with "
"the people involved, including unsolicited interaction with those "
"enforcing the Code of Conduct, for a specified period of time. This "
"includes avoiding interactions in community spaces as well as external "
"channels like social media. Violating these terms may lead to a temporary"
" or permanent ban."
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:109
msgid "Phase 3. Temporary Ban"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:112
msgid ""
"A serious violation of community standards, including sustained "
"inappropriate behavior."
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:115
msgid ""
"A temporary ban from any sort of interaction or public communication with"
" the community for a specified period of time. No public or private "
"interaction with the people involved, including unsolicited interaction "
"with those enforcing the Code of Conduct, is allowed during this period. "
"Violating these terms may lead to a permanent ban."
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:122
msgid "Phase 4. Permanent Ban"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:125
msgid ""
"Demonstrating a pattern of violation of community standards, including "
"sustained inappropriate behavior, harassment of an individual, or "
"aggression toward or disparagement of classes of individuals."
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:130
msgid "A permanent ban from any sort of public interaction within the community."
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:134
msgid "Attribution"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:136
msgid ""
"This Code of Conduct is adapted from the `Contributor Covenant`_ version "
"2.0. You can take it from Contributor Covenant `homepage`_."
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:139
msgid ""
"Community Impact Guidelines were inspired by `Mozilla's code of conduct "
"enforcement ladder`_."
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:141
msgid ""
"For answers to common questions about this code of conduct, see the "
"`FAQ`_ or its translations_."
msgstr ""

View File

@@ -0,0 +1,90 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2019-2021, Hiroshi Miura
# This file is distributed under the same license as the aqtinstall package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2022.
#
msgid ""
msgstr "Project-Id-Version: aqtinstall 3.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-10-09 22:56+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.8.0\n"
#: ../../CONTRIBUTE.rst:3
msgid "Contribution guide"
msgstr "コントリビューションガイド"
#: ../../CONTRIBUTE.rst:5
msgid ""
"This is contribution guide for aqtinstall project. You are welcome to "
"send a Pull-Request, reporting bugs and ask questions."
msgstr "aqtinstallプロジェクトへの貢献ガイドです。Pull-Requestを送信してバグを報告し、質問をすることを歓迎します。"
#: ../../CONTRIBUTE.rst:9
msgid "Resources"
msgstr "リソース"
#: ../../CONTRIBUTE.rst:11
msgid "Project owner: Hiroshi Miura"
msgstr "プロジェクトオーナー:三浦広志"
#: ../../CONTRIBUTE.rst:12
msgid "Bug Tracker: Github issue `Tracker`_"
msgstr "バグトラッカー: Github issue `Tracker`_"
#: ../../CONTRIBUTE.rst:13
msgid "Status: Beta"
msgstr "ステータス:ベータ"
#: ../../CONTRIBUTE.rst:14
msgid "Activity: moderate"
msgstr "活動度:中等度"
#: ../../CONTRIBUTE.rst:19
msgid "Bug triage"
msgstr "バグ・トリアージ"
#: ../../CONTRIBUTE.rst:21
msgid ""
"Every report to github issue tracker should be in triage. whether it is "
"bug, question or invalid."
msgstr ""
#: ../../CONTRIBUTE.rst:26
msgid "Send patch"
msgstr "パッチを送信"
#: ../../CONTRIBUTE.rst:28
msgid "Here is small amount rule when you want to send patch the project;"
msgstr "プロジェクトにパッチを送りたい場合の少量のルールを以下に示します。"
#: ../../CONTRIBUTE.rst:30
msgid "every proposal for modification should send as 'Pull Request'"
msgstr "修正案はすべて「プルリクエスト」として送信する必要があります。"
#: ../../CONTRIBUTE.rst:32
msgid "each pull request can consist of multiple commits."
msgstr "各プルリクエストは複数のコミットで構成されます。"
#: ../../CONTRIBUTE.rst:34
msgid ""
"you are encourage to split modifications to individual commits that are "
"logical subpart."
msgstr "変更を論理的なサブパートである個々のコミットに分割することをお勧めします。"
#: ../../CONTRIBUTE.rst:37
msgid "CI tests"
msgstr "CIテスト"
#: ../../CONTRIBUTE.rst:39
msgid ""
"The project configured to use Azure Pipelines, Github actions and "
"Coveralls for regression test. You can see test results on badge and see "
"details in a web page linked from badge."
msgstr "プロジェクトは、Azure Pipelines、Githubアクション、Coverallsを使用してリグレッションテストを行うように設定されています。テスト結果はバッジで確認でき、詳細はバッジからリンクされたWebページで確認できます。"

View File

@@ -0,0 +1,65 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2019-2021, Hiroshi Miura
# This file is distributed under the same license as the aqtinstall package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2022.
#
msgid ""
msgstr "Project-Id-Version: aqtinstall 3.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-10-09 22:56+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.8.0\n"
#: ../../SECURITY.rst:2
msgid "Security Policy"
msgstr "セキュリティポリシー"
#: ../../SECURITY.rst:5
msgid "Supported Versions"
msgstr "サポートされているバージョン"
#: ../../SECURITY.rst:8
msgid "Version"
msgstr "バージョン"
#: ../../SECURITY.rst:8
msgid "Status"
msgstr "ステータス"
#: ../../SECURITY.rst:10
msgid "3.0.x"
msgstr "3.0.x"
#: ../../SECURITY.rst:10
msgid "Stable version"
msgstr "安定バージョン"
#: ../../SECURITY.rst:12
msgid "2.2.x"
msgstr "2.2.x"
#: ../../SECURITY.rst:12
msgid "Security fixes only"
msgstr "セキュリティ修正のみ"
#: ../../SECURITY.rst:14
msgid "< 2.2"
msgstr "< 2.2"
#: ../../SECURITY.rst:14
msgid "not supported"
msgstr "サポートされない"
#: ../../SECURITY.rst:18
msgid "Reporting a Vulnerability"
msgstr "脆弱性の報告"
#: ../../SECURITY.rst:20
msgid "Please disclose security vulnerabilities privately at miurahr@linux.com"
msgstr "セキュリティの脆弱性については、miurahr@linux.com に提示してください。"

View File

@@ -0,0 +1,152 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2019-2021, Hiroshi Miura
# This file is distributed under the same license as the aqtinstall package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2022.
#
msgid ""
msgstr "Project-Id-Version: aqtinstall 3.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-10-09 22:56+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.8.0\n"
#: ../../authors.rst:6
msgid "Authors"
msgstr "作者"
#: ../../authors.rst:8
msgid "Aqtinstall is written and maintained by Hiroshi Miura <miurahr@linux.com>"
msgstr "Aqtinstallは、三浦広志 <miurahr@linux.com> 氏により作成され、管理されています。"
#: ../../authors.rst:10
msgid "Original qli-installer is written by Linus Jahn"
msgstr "オリジナルのqli-installerはLinus Jahn氏によって書かれました。"
#: ../../authors.rst:12
msgid ""
"Significant contributions for improvements of version 2.0 and 2.1 by "
"David Dalcino David also leads many developments and reviews effort after"
" 2.0."
msgstr "David Dalcinoによるバージョン2.0と2.1の改善への重要な貢献がありました。バージョン2.0以降の多くの開発とレビューの取り組みも主導しています。"
#: ../../authors.rst:15
msgid "All contributors, listed alphabetically, are:"
msgstr "すべてのコントリビュータ(アルファベット順)は次のとおりです。"
#: ../../authors.rst:17
msgid "Andrei Yankovich (tools ifw installation)"
msgstr ""
#: ../../authors.rst:18
msgid "Aurélien Gâteau (patching to qmake)"
msgstr ""
#: ../../authors.rst:19
msgid "Benjamin O (Github Actions and more)"
msgstr ""
#: ../../authors.rst:20
msgid "Christian Hoffmann (Update mirror list)"
msgstr ""
#: ../../authors.rst:21
msgid ""
"David Dalcino (Many improvements on CI automations, commands, tests, "
"documents and so on)"
msgstr ""
#: ../../authors.rst:22
msgid "Doronin Stanislav (document)"
msgstr ""
#: ../../authors.rst:23
msgid "Fabrice Le Bars (32bit binary)"
msgstr ""
#: ../../authors.rst:24
msgid "Felix Barz (Android, Explicit extra module installation)"
msgstr ""
#: ../../authors.rst:25
msgid "Gamso (improve parsing of update.xml)"
msgstr ""
#: ../../authors.rst:26
msgid "Julien Marrec (mypy, type hints)"
msgstr ""
#: ../../authors.rst:27
msgid "Kyle Altendorf (7z binary path search)"
msgstr ""
#: ../../authors.rst:28
msgid "lightmare (Documents)"
msgstr ""
#: ../../authors.rst:29
msgid "Mike Tzou (Update fallback url)"
msgstr ""
#: ../../authors.rst:30
msgid "Martin Delille (Documents)"
msgstr ""
#: ../../authors.rst:31
msgid "mite-user (folder index handling of download web sites)"
msgstr ""
#: ../../authors.rst:32
msgid "Mizux Seihax (Qt versions)"
msgstr ""
#: ../../authors.rst:33
msgid "Mozi (CI/workflow improvement, log format)"
msgstr ""
#: ../../authors.rst:34
msgid "Nelson Chen (CI tests)"
msgstr ""
#: ../../authors.rst:35
msgid "@nikitalita (Binary distribution)"
msgstr ""
#: ../../authors.rst:36
msgid "@pylipp (Documents)"
msgstr ""
#: ../../authors.rst:37
msgid "Sztergbaum Roman (Version database)"
msgstr ""
#: ../../authors.rst:38
msgid "Thomas Grainger (CLI entry point)"
msgstr ""
#: ../../authors.rst:39
msgid "@tsteven4 (fix patching to qmake, pkgconfig and libtool)"
msgstr ""
#: ../../authors.rst:40
msgid "Vadim Peretokin (Version database)"
msgstr ""
#: ../../authors.rst:41
msgid "Vladyslav Hnatiuk (Version database)"
msgstr ""
#: ../../authors.rst:42
msgid "@ypnos (Documents)"
msgstr ""
#: ../../authors.rst:44
msgid ""
"and many other participants and contributors. If you find a missing name "
"to record, please feel free to tell me."
msgstr "他にも多くの参加者や貢献者がいます。記録に名前がない方は、遠慮なく言ってください。"

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,764 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2019-2021, Hiroshi Miura
# This file is distributed under the same license as the aqtinstall package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2022.
#
msgid ""
msgstr "Project-Id-Version: aqtinstall 3.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-10-09 22:56+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.8.0\n"
#: ../../cli.rst:4
msgid "Command Line Options"
msgstr "コマンドラインオプション"
#: ../../cli.rst:6
msgid ""
"The CLI uses argparse to parse the command line options so the short or "
"long versions may be used and the long options may be truncated to the "
"shortest unambiguous abbreviation."
msgstr "コマンドラインのインタフェースは、argparseライブラリを使用してコマンドラインのオプションを解析します。そのため、オプションに、短いバージョンや長いバージョンが使用できるます。長いオプションは最も短い明確な省略形も提供ます。"
#: ../../cli.rst:10
msgid "Generic commands"
msgstr "一般的なコマンド"
#: ../../cli.rst:18
msgid "show generic help"
msgstr "汎用ヘルプの表示"
#: ../../cli.rst:26
msgid "display version"
msgstr "バージョンの表示"
#: ../../cli.rst:30
msgid "List-* Commands"
msgstr "List-*コマンド"
#: ../../cli.rst:32
msgid ""
"These commands are used to list the packages available for installation "
"with ``aqt``."
msgstr "このコマンドは、``aqt`でインストールできるパッケージを一覧表示するために使用します。"
#: ../../cli.rst:37
msgid "list-qt command"
msgstr "list-qtコマンド"
#: ../../cli.rst:55
msgid ""
"List available versions of Qt, targets, extensions, modules, and "
"architectures."
msgstr "Qtの利用可能なバージョン、ターゲット、拡張、モジュール、アーキテクチャを表示します。"
#: ../../cli.rst:59 ../../cli.rst:197 ../../cli.rst:237 ../../cli.rst:282
#: ../../cli.rst:320 ../../cli.rst:605 ../../cli.rst:665 ../../cli.rst:719
#: ../../cli.rst:771
msgid "linux, windows or mac"
msgstr "linux、windows、またはmac"
#: ../../cli.rst:63 ../../cli.rst:324
msgid ""
"desktop, winrt, ios or android. When omitted, the command prints all the "
"targets available for a host OS. Note that winrt is only available on "
"Windows, and ios is only available on Mac OS."
msgstr "desktop、winrt、iosまたはandroid。省略すると、ホストOSで使用可能なすべてのターゲットが出力されます。winrtはWindowsでしか使用できず、iosはMac OSでしか使用できません。"
#: ../../cli.rst:69 ../../cli.rst:338 ../../cli.rst:376
msgid "Display help text"
msgstr "ヘルプテキストを表示する"
#: ../../cli.rst:73
msgid ""
"Extension of packages to list "
"{wasm,src_doc_examples,preview,wasm_preview,x86_64,x86,armv7,arm64_v8a}"
msgstr "リスト表示するパッケージ拡張{wasm,src_doc_examples,preview,wasm_preview,x86_64,x86,armv7,arm64_v8a}"
#: ../../cli.rst:76
msgid ""
"Use the ``--extensions`` flag to list all relevant options for a "
"host/target. Incompatible with the ``--extensions`` flag, but may be "
"combined with any other flag."
msgstr "ホスト/ターゲットに関連するすべてのオプションをリストするには、`--extensions``フラグを使用してください。`--extensions``フラグとは互換性がありませんが、他のフラグと組み合わせることができます。"
#: ../../cli.rst:81
msgid ""
"Qt version in the format of \"5.X.Y\", or the keyword ``latest``. When "
"set, this prints all valid arguments for the ``--extension`` flag for Qt "
"5.X.Y, or the latest version of Qt if ``latest`` is specified. "
"Incompatible with the ``--extension`` flag."
msgstr "\"5.X.Y\"形式のQtバージョン、またはキーワード``latest``。これを設定すると、Qt 5.X.Yの ``--extension`` フラグの有効な引数をすべて出力します。または、``latest``が指定されている場合はQtの最新バージョンを出力します。`--extension`フラグとは互換性がありません。"
#: ../../cli.rst:88
msgid ""
"Print versions of Qt within a `SimpleSpec`_ that specifies a range of "
"versions. You can specify partial versions, inequalities, etc. ``\"*\"`` "
"would match all versions of Qt; ``\">6.0.2,<6.2.0\"`` would match all "
"versions of Qt between 6.0.2 and 6.2.0, etc. For example, ``aqt list-qt "
"windows desktop --spec \"5.12\"`` would print all versions of Qt for "
"Windows Desktop beginning with 5.12. May be combined with any other flag "
"to filter the output of that flag."
msgstr "バージョンの範囲を指定する `SimpleSpec`_ 内のQtのバージョンを表示します。部分的なバージョンや不等式などを指定できます。``\"*\"`` はQtのすべてのバージョンにマッチし、``\">6.0.2,<6.2.0\"`` は6.0.2から6.2.0までのQtのすべてのバージョンにマッチします。例えば、``aqt list-qt windows desktop --spec \"5.12\"`` と入力すると、5.12から始まるWindows デスクトップ用のQtのすべてのバージョンが出力されます。他のフラグと組み合わせて、そのフラグの出力をフィルタリングすることができます。"
#: ../../cli.rst:101
msgid ""
"This flag lists all the modules available for Qt 5.X.Y with a "
"host/target/extension/architecture combination, or the latest version of "
"Qt if ``latest`` is specified. You can list available architectures by "
"using ``aqt list-qt`` with the ``--arch`` flag described below."
msgstr "このフラグは、Qt 5.X.Yで利用可能なすべてのモジュールをホスト/ターゲット/拡張/アーキテクチャの組み合わせで一覧表示します。``latest`` が指定されている場合はQtの最新バージョンを表示します。利用可能なアーキテクチャを一覧表示するには、以下で説明する ``--arch`` フラグを付けて ``aqt list-qt`` を使用します。"
#: ../../cli.rst:108
msgid ""
"Long display for modules: Similar to ``--modules``, but shows extra "
"metadata associated with each module. This metadata is displayed in a "
"table that includes long display names for each module. If your terminal "
"is wider than 95 characters, ``aqt list-qt`` will also display release "
"dates and sizes for each module. An example of this output is displayed "
"below."
msgstr "モジュールの長い表示: ``--modules`` と似ていますが、各モジュールに関連付けられた追加のメタデータを表示します。このメタデータは、各モジュールの長い表示名を含む表に表示されます。端末の表示幅が95文字を超える場合、``aqt list-qt`` には各モジュールのリリース日とサイズも表示されます。この出力例を以下に示します。"
#: ../../cli.rst:151
msgid ""
"Qt version in the format of \"5.X.Y\". When set, this prints all "
"architectures available for Qt 5.X.Y with a host/target/extension, or the"
" latest version of Qt if ``latest`` is specified."
msgstr "Qt version in the format of \"5.X.Y\". 設定すると、ホスト/ターゲット/拡張機能を持つQt 5.X.Yで利用可能なすべてのアーキテクチャを出力します。``latest`` が指定されている場合は、最新バージョンのQtを出力します。"
#: ../../cli.rst:158
msgid ""
"This flag requires a list of at least two arguments: 'Qt version' and "
"'architecture'. The 'Qt version' argument can be in the format \"5.X.Y\" "
"or the \"latest\" keyword. You can use the ``--arch`` flag to see a list "
"of acceptable values for the 'architecture' argument. Any following "
"arguments must be the names of modules available for the preceding "
"version and architecture. You can use the ``--modules`` flag to see a "
"list of acceptable values."
msgstr "このフラグには、'Qt version'と'architecture'の2つ以上の引数のリストが必要です。'Qt version'引数は、\"5.X.Y\"または\"latest\"キーワードの形式にすることができます。'architecture' 引数に指定できる値のリストを見るには、``--arch`` フラグを使用します。後続の引数は、以前のバージョンとアーキテクチャーで使用できるモジュールの名前である必要があります。受け入れ可能な値のリストを見るために、``--modules`` フラグを使うことができます。"
#: ../../cli.rst:164
msgid ""
"If you do not add a list of modules to this flag, this command will print"
" a list of all the archives that make up the base Qt installation."
msgstr "このフラグにモジュールのリストを追加しない場合、このコマンドは基本Qtインストールを構成するすべてのアーカイブのリストを出力します。"
#: ../../cli.rst:167
msgid ""
"If you add a list of modules to this flag, this command will print a list"
" of all the archives that make up the specified modules."
msgstr "このフラグにモジュールのリストを追加すると、指定されたモジュールを構成するすべてのアーカイブのリストが出力されます。"
#: ../../cli.rst:170
msgid ""
"The purpose of this command is to show you what arguments you can pass to"
" the :ref:`archives flag <install archives flag>` when using the "
"``install-*`` commands. This flag allows you to avoid installing parts of"
" Qt that you do not need."
msgstr "このコマンドの目的は、 ``install-*`` コマンドを使うときに :ref:`archives flag <install archives flag>` に渡すことができる引数を表示することです。このフラグを使うと、Qtの不要な部分をインストールするのを避けることができます。"
#: ../../cli.rst:176
msgid ""
"Print only the newest version available May be combined with the "
"``--extension`` and/or ``--spec`` flags."
msgstr "入手可能な最新バージョンのみを印刷します。 ``--extension`` フラグや ``--spec`` フラグと組み合わせることができます。"
#: ../../cli.rst:183
msgid "list-src command"
msgstr "list-srcコマンド"
#: ../../cli.rst:193
msgid ""
"List source archives available for installation using the `install-src "
"command`_."
msgstr "`install-src command`_ を使って、インストール可能なソースアーカイブを一覧表示します。"
#: ../../cli.rst:201 ../../cli.rst:241 ../../cli.rst:286 ../../cli.rst:532
#: ../../cli.rst:614 ../../cli.rst:674 ../../cli.rst:728
msgid ""
"This is a Qt version such as 5.9.7, 5.12.1 etc. Use the :ref:`List-Qt "
"Command` to list available versions."
msgstr "これは5.9.7、5.12.1などのQtバージョンです。有効なバージョンを調べるには、:ref:`List-Qt Command` を使用してください。"
#: ../../cli.rst:206 ../../cli.rst:246 ../../cli.rst:291 ../../cli.rst:537
#: ../../cli.rst:619 ../../cli.rst:679 ../../cli.rst:733
msgid ""
"This is a `SimpleSpec`_ that specifies a range of versions. If you type "
"something in the ``<Qt version>`` positional argument that cannot be "
"interpreted as a version, it will be interpreted as a `SimpleSpec`_, and "
"``aqt`` will select the highest available version within that "
"`SimpleSpec`_."
msgstr "これはバージョンの範囲を指定する `SimpleSpec`_ です。バージョンとして解釈できない何かを位置引数 ``<Qt version>`` に入力すると、それは `SimpleSpec`_ として解釈され、``aqt`` はその`SimpleSpec`_ 内で利用可能な最高バージョンを選択します。"
#: ../../cli.rst:211
msgid ""
"For example, ``aqt list-src mac 5.12`` would print archives for the "
"latest version of Qt 5.12 available (5.12.11 at the time of this "
"writing)."
msgstr "例えば、``aqt list-src mac 5.12``は入手可能な最新バージョンのQt 5.12(この記事を書いている時点では5.12.11)のアーカイブを出力します。"
#: ../../cli.rst:218
msgid "list-doc command"
msgstr "list-docコマンド"
#: ../../cli.rst:229
msgid ""
"List documentation archives and modules available for installation using "
"the `install-doc command`_."
msgstr "`install-docコマンド`_ を使ってインストール可能なドキュメントアーカイブとモジュールをリストアップできます。"
#: ../../cli.rst:232
msgid ""
"By default, ``list-doc`` will print a list of archives available for "
"installation using the `install-doc command`_, with the ``--archives`` "
"option."
msgstr "デフォルトでは、 ``list-doc`` は `install-docコマンド`_ と ``--archives`` オプションを使ってインストール可能なアーカイブのリストを出力します。"
#: ../../cli.rst:251
msgid ""
"For example, ``aqt list-doc mac 5.12`` would print archives for the "
"latest version of Qt 5.12 available (5.12.11 at the time of this "
"writing)."
msgstr "例えば、``aqt list-doc mac 5.12`` は入手可能な最新バージョンのQt 5.12(この記事を書いている時点では5.12.11)のアーカイブを出力します。"
#: ../../cli.rst:256
msgid ""
"This flag causes ``list-doc`` to print a list of modules available for "
"installation using the `install-doc command`_, with the ``--modules`` "
"option."
msgstr "このフラグは、``list-doc``に `install-doc command`_ と ``--modules`` オプションを使ってインストール可能なモジュールのリストを出力させます。"
#: ../../cli.rst:263
msgid "list-example command"
msgstr "list-exampleコマンド"
#: ../../cli.rst:274
msgid ""
"List example archives and modules available for installation using the "
"`install-example command`_."
msgstr "`install-example command`_ を使ってインストール可能なアーカイブとモジュールの例を挙げます。"
#: ../../cli.rst:277
msgid ""
"By default, ``list-example`` will print a list of archives available for "
"installation using the `install-example command`_, with the "
"``--archives`` option."
msgstr "デフォルトでは、 ``list-example`` は `install-example command`_ と ``--archives`` オプションを使ってインストール可能なアーカイブのリストを出力します。"
#: ../../cli.rst:296
msgid ""
"For example, ``aqt list-example mac 5.12`` would print archives for the "
"latest version of Qt 5.12 available (5.12.11 at the time of this "
"writing)."
msgstr "例えば、 ``aqt list-example mac 5.12`` は入手可能な最新バージョンのQt 5.12(この記事を書いている時点では5.12.11)のアーカイブを出力します。"
#: ../../cli.rst:301
msgid ""
"This flag causes ``list-example`` to print a list of modules available "
"for installation using the `install-example command`_, with the "
"``--modules`` option."
msgstr "このフラグは、 ``list-example`` に `install-example command`_ と ``--modules`` オプションを使ってインストール可能なモジュールのリストを出力させます。"
#: ../../cli.rst:308
msgid "list-tool command"
msgstr "list-toolコマンド"
#: ../../cli.rst:316
msgid "List available tools"
msgstr "使用可能なツールを一覧表示"
#: ../../cli.rst:330
msgid ""
"The name of a tool. Use ``aqt list-tool <host> <target>`` to see accepted"
" values. When set, this prints all 'tool variant names' available."
msgstr "ツールの名前です。利用可能な値を確認するには、 ``aqt list-tool <host> <target>`` を使用してください設定すると、利用可能なすべての 'ツールバリアント名' を出力します。"
#: ../../cli.rst:333
msgid ""
"The output of this command is meant to be used with the :ref:`aqt "
"install-tool <Tools installation command>` below."
msgstr "このコマンドの出力は、以下の :ref:`aqt install-tool <Tools installation command>` で使うことを意図しています。"
#: ../../cli.rst:343
msgid ""
"Long display: shows extra metadata associated with each tool variant. "
"This metadata is displayed in a table, and includes versions and release "
"dates for each tool. If your terminal is wider than 95 characters, ``aqt "
"list-tool`` will also display the names and descriptions for each tool. "
"An example of this output is displayed below."
msgstr "長い表示: 各ツールバリアントに関連付けられた追加のメタデータを表示します。このメタデータは表形式で表示され、各ツールのバージョンとリリース日が含まれます。あなたの端末の表示幅が95文字を超える場合、``aqt list-tool`` は各ツールの名前と説明も表示します。この出力例を以下に示します。"
#: ../../cli.rst:360
msgid "Install-* Commands"
msgstr "Install-*コマンド"
#: ../../cli.rst:362
msgid "These commands are used to install Qt, tools, source, docs, and examples."
msgstr "これらのコマンドは、Qt、ツール、ソース、ドキュメント、サンプルをインストールするために使用されます。"
#: ../../cli.rst:368
msgid "Common Options"
msgstr "共通オプション"
#: ../../cli.rst:370
msgid ""
"Most of these commands share the same command line options, and these "
"options are described here:"
msgstr "これらのコマンドのほとんどは、同じコマンドラインオプションを共有しています。次に、これらのオプションについて説明します。"
#: ../../cli.rst:380
msgid ""
"Specify output directory. By default, aqt installs to the current working"
" directory."
msgstr "出力ディレクトリを指定します。デフォルトでは、aqtは現在の作業ディレクトリにインストールされます。"
#: ../../cli.rst:385
msgid ""
"Specify mirror site base url such as -b "
"``https://mirrors.dotsrc.org/qtproject`` where 'online' folder exist."
msgstr "'online' フォルダが存在する -b ``https://mirrors.dotsrc.org/qtproject`` などのミラーサイトベースURLを指定します。"
#: ../../cli.rst:390
msgid ""
"Specify the path to your own ``settings.ini`` file. See :ref:`the "
"Configuration section<configuration-ref>`."
msgstr "独自の ``settings.ini`` ファイルへのパスを指定します。:ref:`the Configuration section <configuration-ref>` を参照してください。"
#: ../../cli.rst:394
msgid ""
"The connection timeout, in seconds, for the download site. (default: 5 "
"sec)"
msgstr "ダウンロードサイトの接続タイムアウト(秒単位)。(デフォルト:5秒)"
#: ../../cli.rst:398
msgid ""
"Specify external 7zip command path. By default, aqt uses py7zr_ for this "
"task."
msgstr "外部7zipコマンドのパスを指定します。デフォルトでは、aqtはこのタスクに py7zr_ を使用します。"
#: ../../cli.rst:400
msgid ""
"In the past, our users have had success using 7-zip_ on Windows, Linux "
"and Mac. You can install 7-zip on Windows with Choco_. The Linux/Mac port"
" of 7-zip is called ``p7zip``, and you can install it with brew_ on Mac, "
"or on Linux with your package manager."
msgstr "これまで、ユーザは Windows、Linux、Macで 7-zip_ を使ってうまくやってきました。Windowsでは Choco_ を使って7-zipをインストールすることができます。Linux/Macのポートである 7-zipは ``p7zip`` と呼ばれており、brew_ on Macでインストールするか、Linuxではパッケージマネージャを使ってインストールすることができます。"
#: ../../cli.rst:412
msgid "Use the internal extractor, py7zr_"
msgstr "内部エクストラクタ py7zr_ を使用します。"
#: ../../cli.rst:416
msgid ""
"Keep downloaded archive when specified, otherwise remove after install. "
"Use ``--archive-dest <path>`` to choose where aqt will place these files."
" If you do not specify a download destination, aqt will place these files"
" in the current working directory."
msgstr "指定された場合はダウンロードされたアーカイブを保持します。指定されていない場合はインストール後に削除します。これらのファイルをaqtが配置する場所を選択するには、 ``--archive-dest <path>``を使用します。ダウンロード先を指定しない場合、aqtはこれらのファイルを現在の作業ディレクトリに配置します。"
#: ../../cli.rst:423
msgid ""
"Set the destination path for downloaded archives (temp directory by "
"default). All downloaded archives will be automatically deleted unless "
"you have specified the ``--keep`` option above, or ``aqt`` crashes."
msgstr "ダウンロードしたアーカイブの保存先パスを設定します(デフォルトディレクトリ)を設定します。上記の ``--keep`` オプションが指定されていないか、または ``aqt`` がクラッシュしない限り、ダウンロードしたアーカイブはすべて自動的に削除されます。"
#: ../../cli.rst:427
msgid ""
"Note that this option refers to the intermediate ``.7z`` archives that "
"``aqt`` downloads and then extracts to ``--outputdir``. Most users will "
"not need to keep these files."
msgstr "このオプションは、 ``aqt`` がダウンロードして ``--outputdir`` に展開する中間の ``.7z`` アーカイブを参照していることに注意してください。ほとんどのユーザはこれらのファイルを保持する必要はありません。"
#: ../../cli.rst:433
msgid ""
"Specify extra modules to install as a list. Use the appropriate ``aqt "
"list-*`` command to list available modules:"
msgstr "リストとしてインストールする追加モジュールを指定してください。適切な ``aqt list-*`` コマンドを使って、利用可能なモジュールをリストしてください:"
#: ../../cli.rst:437 ../../cli.rst:480
msgid "Install command"
msgstr "インストール・コマンド"
#: ../../cli.rst:437 ../../cli.rst:480
msgid "List command"
msgstr "リストコマンド"
#: ../../cli.rst:437 ../../cli.rst:480
msgid "Usage of list command"
msgstr "リストコマンドの使用法"
#: ../../cli.rst:439 ../../cli.rst:482
msgid "install-qt"
msgstr "install-qt"
#: ../../cli.rst:439 ../../cli.rst:482
msgid "`list-qt command`_"
msgstr "`list-qt command`_"
#: ../../cli.rst:439
msgid "``list-qt <host> <target> --modules <version> <arch>``"
msgstr "``list-qt <host> <target> --modules <version> <arch>``"
#: ../../cli.rst:441 ../../cli.rst:484
msgid "install-example"
msgstr "install-example"
#: ../../cli.rst:441 ../../cli.rst:484
msgid "`list-example command`_"
msgstr "`list-example command`_"
#: ../../cli.rst:441
msgid "``list-example <host> <version> --modules``"
msgstr "``list-example <host> <version> --modules``"
#: ../../cli.rst:443 ../../cli.rst:488
msgid "install-doc"
msgstr "install-doc"
#: ../../cli.rst:443 ../../cli.rst:488
msgid "`list-doc command`_"
msgstr "`list-doc command`_"
#: ../../cli.rst:443
msgid "``list-doc <host> <version> --modules``"
msgstr "``list-doc <host> <version> --modules``"
#: ../../cli.rst:447
msgid ""
"This option only applicable to ``install-qt``, ``install-example``, and "
"``install-doc``."
msgstr "このオプションは、 ``install-qt``、 ``install-example`` 、 ``install-doc`` にのみ適用できます。"
#: ../../cli.rst:449
msgid "You can install multiple modules like this:"
msgstr "次のように、複数のモジュールをインストールできます。"
#: ../../cli.rst:457
msgid ""
"If you wish to install every module available, you may use the ``all`` "
"keyword instead of a list of modules, like this:"
msgstr "利用可能なすべてのモジュールをインストールしたい場合は、次のように、モジュールのリストの代わりに ``all``キーワードを使うことができます。"
#: ../../cli.rst:468
msgid ""
"[Advanced] Specify subset of archives to **limit** installed archives. It"
" will only affect the base Qt installation and the ``debug_info`` module."
" This is advanced option and not recommended to use for general usage. "
"Main purpose is speed up CI/CD process by limiting installed modules. It "
"can cause broken installation of Qt SDK."
msgstr "[高度] アーカイブのサブセットを指定して、インストールされているアーカイブを**制限**します。これはQtの基本インストールと ``debug_info`` モジュールにのみ影響します。これは高度なオプションであり、一般的な使用にはお勧めできません。主な目的は、インストールされているモジュールを制限することによってCI/CDプロセスを高速化することです。Qt SDKのインストールが失敗する可能性があります。"
#: ../../cli.rst:474
msgid ""
"This option is applicable to all the ``install-*`` commands except for "
"``install-tool``."
msgstr "このオプションは、``install-tool``を除くすべての ``install-*`` コマンドに適用できます。"
#: ../../cli.rst:476
msgid ""
"You can print a list of all acceptable values to use with this command by"
" using the appropriate ``aqt list-*`` command:"
msgstr "適切な``aqt list-*`` コマンドを使えば、このコマンドで使える全ての値のリストを出力することができます。"
#: ../../cli.rst:482
msgid "``list-qt <host> <target> --archives <version>``"
msgstr "``list-qt <host> <target> --archives <version>``"
#: ../../cli.rst:484
msgid "``list-example <host> <version>``"
msgstr "``list-example <host> <version>``"
#: ../../cli.rst:486
msgid "install-src"
msgstr "install-src"
#: ../../cli.rst:486
msgid "`list-src command`_"
msgstr "`list-src command`_"
#: ../../cli.rst:486
msgid "``list-src <host> <version>``"
msgstr "``list-src <host> <version>``"
#: ../../cli.rst:488
msgid "``list-doc <host> <version>``"
msgstr "``list-doc <host> <version>``"
#: ../../cli.rst:495
msgid "install-qt command"
msgstr "install-qtコマンド"
#: ../../cli.rst:517
msgid ""
"Install Qt library, with specified version and target. There are various "
"combinations to accept according to Qt version."
msgstr "指定されたバージョンとターゲットでQtライブラリをインストールします。Qtのバージョンに応じて、さまざまな組み合わせを受け入れることができます。"
#: ../../cli.rst:522
msgid ""
"linux, windows or mac. The operating system on which the Qt development "
"tools will run."
msgstr "linux, windows または、mac. Qt開発ツールが実行されるオペレーティングシステム。"
#: ../../cli.rst:526
msgid ""
"desktop, ios, winrt, or android. The type of device for which you are "
"developing Qt programs. If your target is ios, please be aware that "
"versions of Qt older than 6.2.4 are expected to be non-functional with "
"current versions of XCode (applies to any XCode greater than or equal to "
"13)."
msgstr "desktop, ios, winrt, または androidQtプログラムを開発するデバイスのタイプ。ターゲットがiosの場合、6.2.4よりも古いバージョンのQtは、現在のバージョンのXCodeでは機能しないことに注意してください(バージョン13以上のXCodeに適用されます)。"
#: ../../cli.rst:542
msgid ""
"For example, ``aqt install-qt mac desktop 5.12`` would install the newest"
" version of Qt 5.12 available, and ``aqt install-qt mac desktop \"*\"`` "
"would install the highest version of Qt available."
msgstr "例えば、``aqt install-qt mac desktop 5.12`` はQt 5.12の最新バージョンをインストールし、``aqt install-qt mac desktop \"*\"`` はQtの最新バージョンをインストールします。"
#: ../../cli.rst:546
msgid ""
"When using this option, ``aqt`` will print the version that it has "
"installed in the logs so that you can verify it easily."
msgstr "このオプションを使用すると、``aqt`` はインストールされたバージョンをログに出力するので、簡単に確認できます。"
#: ../../cli.rst:551
msgid "The compiler architecture for which you are developing. Options:"
msgstr "開発対象のコンパイラアーキテクチャ。オプション:"
#: ../../cli.rst:553
msgid "gcc_64 for linux desktop"
msgstr "Linuxデスクトップの場合 gcc_64"
#: ../../cli.rst:555
msgid "clang_64 for mac desktop"
msgstr "mac デスクトップの場合: clang_64"
#: ../../cli.rst:557
msgid ""
"win64_msvc2019_64, win64_msvc2017_64, win64_msvc2015_64, win32_msvc2015, "
"win32_mingw53 for windows desktop"
msgstr "Windowsデスクトップの場合は、win64_msvc2019_64, win64_msvc2017_64, win64_msvc2015_64, win32_msvc2015, win32_mingw53 "
#: ../../cli.rst:559
msgid "android_armv7, android_arm64_v8a, android_x86, android_x86_64 for android"
msgstr "Androidの場合は android_armv7, android_arm64_v8a, android_x86, android_x86_64"
#: ../../cli.rst:561
msgid "Use the :ref:`List-Qt Command` to list available architectures."
msgstr ":ref:`List-Qt Command` を使用して、利用可能なアーキテクチャを一覧表示してください。"
#: ../../cli.rst:565
msgid ""
"If you are installing an ios or android version of Qt, the corresponding "
"desktop version of Qt must be installed alongside of it. Turn this option"
" on to install it automatically."
msgstr "iosまたはandroidバージョンのQtをインストールする場合は、対応するデスクトップバージョンのQtも一緒にインストールする必要があります。このオプションをオンにすると、自動的にインストールされます。"
#: ../../cli.rst:570
msgid ""
"[Advanced] Specify not to install all base packages. This is advanced "
"option and you should use it with ``--modules`` option. This allow you to"
" add modules to existent Qt installation."
msgstr "[高度]すべての基本パッケージをインストールしないように指定します。これは拡張オプションなので、``--modules`` オプションと一緒に使うべきです。これにより、既存のQtインストールにモジュールを追加できます。"
#: ../../cli.rst:574 ../../cli.rst:635 ../../cli.rst:688 ../../cli.rst:743
#: ../../cli.rst:790
msgid "See `common options`_."
msgstr "`common options`_ 参照"
#: ../../cli.rst:580
msgid "install-src command"
msgstr "install-srcコマンド"
#: ../../cli.rst:600
msgid "Install Qt source code for the specified version and target."
msgstr "指定されたバージョンとターゲットのQtソースコードをインストールします。"
#: ../../cli.rst:609 ../../cli.rst:669 ../../cli.rst:723
msgid ""
"Deprecated and marked for removal in a future version of aqt. This "
"parameter exists for backwards compatibility reasons, and its value is "
"ignored."
msgstr "将来のバージョンのaqtでは廃止され、削除される予定です。このパラメータは下位互換性のために存在し、その値は無視されます。"
#: ../../cli.rst:624
msgid ""
"For example, ``aqt install-src mac 5.12`` would install sources for the "
"newest version of Qt 5.12 available, and ``aqt install-src mac \"*\"`` "
"would install sources for the highest version of Qt available."
msgstr "例えば、``aqt install-src mac 5.12`` は入手可能な最新バージョンのQt 5.12のソースをインストールし、``aqt install-src mac \"*\"`` は入手可能な最新バージョンのQtのソースをインストールします。"
#: ../../cli.rst:630
msgid ""
"by adding ``--kde`` option, KDE patch collection is applied for qtbase "
"tree. It is only applied to Qt 5.15.2. When specified version is other "
"than it, command will abort with error when using ``--kde``."
msgstr "「--kde」オプションを追加すると、qtbaseのソースツリーにKDEパッチコレクションが適用されます。これはQt 5.15.2にのみ適用されます。指定されたバージョンがそれ以外の場合、``--kde`` を指定したコマンドはエラーで中断されます。"
#: ../../cli.rst:641
msgid "install-doc command"
msgstr "install-docコマンド"
#: ../../cli.rst:661
msgid "Install Qt documentation for the specified version and target."
msgstr "指定されたバージョンとターゲットのQtドキュメントをインストールします。"
#: ../../cli.rst:684
msgid ""
"For example, ``aqt install-doc mac 5.12`` would install documentation for"
" the newest version of Qt 5.12 available, and ``aqt install-doc mac "
"\"*\"`` would install documentation for the highest version of Qt "
"available."
msgstr "例えば、``aqt install-doc mac 5.12`` と指定するとQt 5.12の最新バージョンのドキュメントがインストールされ、``aqt install-doc mac \"*\"`` と指定するとQtの最新バージョンのドキュメントがインストールされます。"
#: ../../cli.rst:694
msgid "install-example command"
msgstr "install-exampleコマンド"
#: ../../cli.rst:714
msgid "Install Qt examples for the specified version and target."
msgstr "指定されたバージョンとターゲットのQtサンプルをインストールします。"
#: ../../cli.rst:738
msgid ""
"For example, ``aqt install-example mac 5.12`` would install examples for "
"the newest version of Qt 5.12 available, and ``aqt install-example mac "
"\"*\"`` would install examples for the highest version of Qt available."
msgstr "例えば、``aqt install-example mac 5.12``はQt 5.12の最新バージョンのサンプルをインストールし、``aqt install-example mac \"*\"``はQtの最新バージョンのサンプルをインストールします。"
#: ../../cli.rst:749
msgid "install-tool command"
msgstr "install-toolコマンド"
#: ../../cli.rst:767
msgid "Install tools like QtIFW, mingw, Cmake, Conan, and vcredist."
msgstr "QtIFW、mingw、Cmake、Conan、vcredistなどのツールをインストールします。"
#: ../../cli.rst:775
msgid "desktop, ios or android"
msgstr "desktop、ios、またはAndroid"
#: ../../cli.rst:779
msgid ""
"install tools specified. tool name may be 'tools_openssl_x64', "
"'tools_vcredist', 'tools_ninja', 'tools_ifw', 'tools_cmake'"
msgstr "指定されたツールをインストールします。ツール名は'tools_openssl_x64'、'tools_vcredist'、'tools_ninja'、'tools_ifw'、'tools_cmake'のいずれかです。"
#: ../../cli.rst:784
msgid ""
"Optional field to specify tool variant. It may be required for vcredist "
"and mingw installation. tool variant names may be "
"'qt.tools.win64_mingw810', 'qt.tools.vcredist_msvc2013_x64'."
msgstr "ツールバリアントを指定するオプションのフィールド。vcredistおよびmingwのインストールで必要になる場合があります。ツールバリアント名は'qt.tools.win64_mingw810','qt.tools.vcredist_msvc2013_x64'のようになります。"
#: ../../cli.rst:787
msgid ""
"You should use the :ref:`List-Tool command` to display what tools and "
"tool variant names are available."
msgstr ":ref:`List-Tool command`を使用して、使用可能なツールとツールバリアント名を表示する必要があります。"
#: ../../cli.rst:794
msgid "Legacy subcommands"
msgstr "従来のサブコマンド"
#: ../../cli.rst:796
msgid ""
"The subcommands ``install``, ``tool``, ``src``, ``doc``, and ``examples``"
" have been deprecated in favor of the newer ``install-*`` commands, but "
"they remain in aqt in case you still need to use them. Documentation for "
"these older commands is still available at "
"https://aqtinstall.readthedocs.io/en/v1.2.4/"
msgstr "サブコマンドの「install」、「tool」、「src」、「doc」、および「examples」は、新しい「install-*」コマンドのために廃止されましたが、まだ使用する必要がある場合に備えて、aqtに残っています。これらの古いコマンドのドキュメントは、https://aqtinstall.readthedocs.io/en/v1.2.4/でまだ入手できます。"
#: ../../cli.rst:803
msgid "Command examples"
msgstr "コマンドの例"
#: ../../cli.rst:807
msgid ""
"Example: Installing Qt SDK 5.12.12 for Linux with QtCharts and "
"QtNetworkAuth:"
msgstr "例:QtChartsとQtNetworkAuthでQt SDK 5.12.12 for Linuxをインストールする:"
#: ../../cli.rst:815
msgid "Example: Installing the newest LTS version of Qt 5.12:"
msgstr "例:Qt 5.12の最新のLTSバージョンをインストールする"
#: ../../cli.rst:823
msgid "Example: Installing Android (armv7) Qt 5.13.2:"
msgstr "例:Android(armv7)Qt 5.13.2のインストール:"
#: ../../cli.rst:830
msgid "Example: Install examples, doc and source:"
msgstr "例: example、docおよびsourceのインストール:"
#: ../../cli.rst:838
msgid ""
"Example: Print archives available for installation with ``install-"
"example/doc/src``:"
msgstr "例: ``install-example/doc/src`` でインストール可能なアーカイブを一覧表示します。"
#: ../../cli.rst:846
msgid ""
"Example: Print modules available for installation with ``install-"
"example/doc``:"
msgstr "例: ``install-example/doc`` でインストール可能なモジュールを一覧表示します:"
#: ../../cli.rst:853
msgid "Example: Install Web Assembly"
msgstr "例: Webアセンブリのインストール"
#: ../../cli.rst:860
msgid "Example: List available versions of Qt on Linux"
msgstr "例: Linuxで利用可能なQtのバージョンを一覧表示する"
#: ../../cli.rst:867
msgid "Example: List available versions of Qt6 on macOS"
msgstr "例:macOS上で利用可能なQt6のバージョンを一覧表示する"
#: ../../cli.rst:874
msgid "Example: List available modules for latest version of Qt on macOS"
msgstr "例:macOS上のQtの最新バージョンで利用可能なモジュールを一覧表示する"
#: ../../cli.rst:881
msgid "Example: List available architectures for Qt 6.1.2 on windows"
msgstr "例:Windows上のQt 6.1.2で利用可能なアーキテクチャを一覧表示する"
#: ../../cli.rst:888
msgid "Example: List available tools on windows"
msgstr "例: WIndowsで使用可能なツールを一覧表示する"
#: ../../cli.rst:895
msgid "Example: List the variants of IFW available:"
msgstr "例:使用可能なIFWのバリエーションを一覧表示する。"
#: ../../cli.rst:904
msgid ""
"Example: List the variants of IFW, including version, release date, "
"description, etc.:"
msgstr "例:バージョン、リリース日、説明など、IFWのバリエーションを一覧表示する。"
#: ../../cli.rst:911
msgid "Example: Install an Install FrameWork (IFW):"
msgstr "例:Install FrameWork(IFW)のインストール:"
#: ../../cli.rst:918
msgid "Example: Install vcredist on Windows:"
msgstr "例:Windowsへのvcredistのインストール:"
#: ../../cli.rst:927
msgid "Example: Install MinGW on Windows"
msgstr "例:WindowsへのMinGWのインストール"
#: ../../cli.rst:935
msgid "Example: Show help message"
msgstr "例:ヘルプメッセージの表示"

View File

@@ -0,0 +1,261 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2019-2021, Hiroshi Miura
# This file is distributed under the same license as the aqtinstall package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2022.
#
msgid ""
msgstr "Project-Id-Version: aqtinstall 3.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-10-09 22:56+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.8.0\n"
#: ../../configuration.rst:4
msgid "Configuration"
msgstr "構成"
#: ../../configuration.rst:6
msgid ""
"``aqtinstall`` can be configured through a configuration file. A default "
"configuration is stored in ``aqt/settings.ini`` file."
msgstr "``aqtinstall``は設定ファイルで設定できます。デフォルトの設定は ``aqt/settings.ini`` ファイルに保存されています。"
#: ../../configuration.rst:9
msgid ""
"You can specify custom configuration file through ``AQT_CONFIG`` "
"environment variable or \"-c\" or \"--config\" command line option."
msgstr "環境変数 ``AQT_CONFIG`` やコマンドラインオプション``-c``や``--config`` でカスタム設定ファイルを指定することができます。"
#: ../../configuration.rst:12
msgid "A file is like as follows:"
msgstr "設定ファイルは次のようになります。"
#: ../../configuration.rst:54
msgid "Settings"
msgstr "設定"
#: ../../configuration.rst:56
msgid "The ``[aqt]`` section configures basic behavior."
msgstr "``[aqt]`` セクションは基本的な動作を設定します。"
#: ../../configuration.rst:60
msgid "concurrency:"
msgstr "concurrency:"
#: ../../configuration.rst:59
msgid ""
"``concurrency`` is a setting how many download concurrently starts. It "
"should be a integer value."
msgstr "``concurrency`` は、同時に開始するダウンロードの数を設定します。これは整数値でなくてはなりません。"
#: ../../configuration.rst:65
msgid "baseurl:"
msgstr "baseurl:"
#: ../../configuration.rst:63
msgid ""
"``baseurl`` is a URL of Qt download site. When you have your own Qt "
"download site repository, you can set it here. It is as same as "
"``--base`` option."
msgstr "``baseurl`` はQtダウンロードサイトのURLです。独自のQtダウンロードサイトリポジトリがある場合は、ここで設定できます。これは``--base``オプションと同じです。"
#: ../../configuration.rst:71
msgid "7zcmd:"
msgstr "7zcmd:"
#: ../../configuration.rst:68
msgid ""
"It is a command name of 7-zip. When ``aqtinstall`` is installed "
"**without** recommended library ``py7zr``, it is used to extract archive "
"instead of ``py7zr`` library. When ``--external`` option specified, a "
"value is override with option's one."
msgstr "圧縮解凍ツールの7-zipのコマンド名です。``aqtinstall`` が **推奨ライブラリ``py7zr``なしで** インストールされている場合、``py7zr`` ライブラリの代わりにアーカイブを抽出するために使用されます。``--external`` オプションが指定されている場合、オプションの指定値で上書きされます。"
#: ../../configuration.rst:78
msgid "print_stacktrace_on_error:"
msgstr "print_stacktrace_on_error:"
#: ../../configuration.rst:74
msgid ""
"``print_stacktrace_on_error`` is either ``True`` or ``False``. The "
"``True`` setting causes a stack trace to be printed to stderr any time an"
" error occurs that will end the program. The ``False`` setting will hide "
"the stack trace, unless an unhandled exception occurs."
msgstr "``print_stacktrace_on_error`` は、 ``True`` か``False``を値にとります。``True`` に設定すると、プログラムを終了させるエラーが発生するたびにスタックトレースがstderrに出力されます。``False``に設定すると、未処理の例外が発生しない限り、スタックトレースは表示されません。"
#: ../../configuration.rst:85
msgid "always_keep_archives:"
msgstr "always_keep_archives:"
#: ../../configuration.rst:81
msgid ""
"This is either ``True`` or ``False``. The ``True`` setting turns on the "
"``--keep`` option every time you run aqt, and cannot be overridden by "
"command line options. The ``False`` setting will require you to set "
"``--keep`` manually every time you run aqt, unless you don't want to keep"
" ``.7z`` archives."
msgstr "これは、 ``True``か ``False`` を値にとります。``True`` が設定さえると、 ``--keep`` オプションが、aqt実行時に毎回指定されたことになります。コマンドラインオプションで上書きできません。 ``False`` が設定されると、 aqt実行するときに``.7z``アーカイブを削除したくないときは、``--keep`` を手動で設定する必要があります。"
#: ../../configuration.rst:90
msgid "archive_download_location:"
msgstr "archive_download_location:"
#: ../../configuration.rst:88
msgid ""
"This is the relative or absolute path to the location in which ``.7z`` "
"archives will be downloaded, when ``--keep`` is turned on. You can "
"override this location with the ``--archives-dest`` option."
msgstr "これは、``--keep`` がオンになっている場合に、``.7z`` アーカイブがダウンロードされる場所への相対パスまたは絶対パスです。この場所は、``--archives-dest`` オプションで上書きできます。"
#: ../../configuration.rst:104
msgid "min_module_size:"
msgstr "min_module_size:"
#: ../../configuration.rst:93
msgid ""
"This is the minimum decompressed size, in bytes, of the modules that aqt "
"is permitted to list. The authors of aqt have discovered that the Qt "
"repository contains a few mysteriously \"empty\" modules, including the "
"examples modules for `qtlottie` and `qtquicktimeline`. These modules "
"consist of a single archive that contains empty directories, and they are"
" exactly 40 bytes when uncompressed. The authors feel that it is not "
"useful for ``aqt list-*`` to list these empty modules. If you want to "
"print these modules with ``aqt list-*``, please feel free to change the "
"`min_module_size` value to something less than 40."
msgstr "これは、aqtがリストすることを許可されているモジュールの最小解凍サイズ(バイト単位)です。aqtの作成者は、Qtリポジトリに、`qtlottie`と`qtquicktimeline`のサンプルモジュールになど、いくつかの不可解な「空の」モジュールが含まれていることを発見しました。これらのモジュールは、空のディレクトリを含む1つのアーカイブで構成され、圧縮されていない場合は正確に40バイトです。著者らは、これらの空のモジュールを列挙することは ``aqt list-*`` にとって有用ではないと感じています。これらのモジュールを ``aqt list-*`` で表示したい場合は、`min_module_size` の値を40以下に変更してください。"
#: ../../configuration.rst:102
msgid ""
"This setting has no effect on your ability to install these modules. "
"``aqt install-*`` can will still install them without any warnings."
msgstr "この設定はこれらのモジュールをインストールする能力に影響を与えません。``aqt install-*`` は警告なしでそれらをインストールします。"
#: ../../configuration.rst:106
msgid ""
"The ``[requests]`` section controls the way that ``aqt`` makes network "
"requests."
msgstr "``[requests]`` セクションは、``aqt`` がネットワークリクエストを行う方法を制御します。"
#: ../../configuration.rst:110
msgid "connection_timeout:"
msgstr "connection_timeout:"
#: ../../configuration.rst:109
msgid ""
"``connection_timeout`` is a timeout in second for connection. It is "
"passed to ``requests`` library."
msgstr "``connection_timeout`` は接続の秒単位のタイムアウトです。これは``requests``ライブラリに渡されます。"
#: ../../configuration.rst:114
msgid "response_timeout:"
msgstr ""
#: ../../configuration.rst:113
msgid ""
"``response_timeout`` is a timeout in second how much time waiting for "
"response. It is passed to ``requests`` library."
msgstr "``response_timeout``は応答待ち時間の秒単位のタイムアウトです。これは``requests``ライブラリに渡されます。"
#: ../../configuration.rst:117
msgid "max_retries:"
msgstr "max_retries:"
#: ../../configuration.rst:117
msgid "Deprecated; please do not use this setting. It has been replaced by the"
msgstr "廃止されました。この設定は使用しないでください。"
#: ../../configuration.rst:121
msgid "max_retries_on_connection_error:"
msgstr "max_retries_on_connection_error:"
#: ../../configuration.rst:120
msgid ""
"``max_retries_on_connection_error`` is an integer that controls how many "
"times ``aqt`` will try to reconnect to the server in the case of a "
"connection error."
msgstr "``max_retries_on_connection_error`` は、接続エラーが発生した場合に ``aqt`` がサーバに再接続しようとする回数を制御する整数です。"
#: ../../configuration.rst:127
msgid "retry_backoff:"
msgstr "retry_backoff:"
#: ../../configuration.rst:124
msgid ""
"``retry_backoff`` is a floating point number that controls how long "
"``aqt`` will sleep between failed connection attempts. Setting this value"
" too low will hammer the server, and may result in no successful "
"connections at all."
msgstr "``retry_backoff`` は浮動小数点数で、``aqt`` が失敗した接続試行間にスリープする時間を制御します。この値をあまりに低く設定するとサーバに衝撃を与え、接続が全く成功しなくなる可能性があります。"
#: ../../configuration.rst:132
msgid "max_retries_on_checksum_error:"
msgstr "max_retries_on_checksum_error:"
#: ../../configuration.rst:130
msgid ""
"This setting controls how many times ``aqt`` will attempt to download a "
"file, in the case of a checksum error."
msgstr "この設定は、チェックサムエラーが発生した場合に ``aqt`` がファイルをダウンロードしようとする回数を制御します。"
#: ../../configuration.rst:134
msgid "The ``[mirrors]`` section is a configuration for mirror handling."
msgstr "``[mirrors]`` セクションはミラー処理のための設定です。"
#: ../../configuration.rst:152
msgid "trusted_mirrors:"
msgstr "trusted_mirrors:"
#: ../../configuration.rst:137
msgid ""
"``trusted_mirrors`` is a list of URLs that you trust to provide accurate "
"checksums for all downloaded archives. This is a security feature; please"
" do not change this value unless you know what you're doing!"
msgstr "``trusted_mirrors`` は、ダウンロードされたすべてのアーカイブに対して正確なチェックサムを提供するために信頼しているURLのリストです。これはセキュリティ機能です。何をしているのかわからない限り、この値を変更しないでください!"
#: ../../configuration.rst:142
msgid ""
"``aqtinstall`` downloads all checksums from mirrors in this list. These "
"checksums are used to verify that every other file that ``aqtinstall`` "
"downloads is, in fact, the correct file, and not a corrupt or malicious "
"copy of the file. You may need to modify this list if the default mirrors"
" are unreachable, or if you do not trust that they have not been "
"compromised."
msgstr "``aqtinstall`` は、このリスト内のミラーからすべてのチェックサムをダウンロードします。これらのチェックサムは、``aqtinstall`` がダウンロードする他のすべてのファイルが、実際には正しいファイルであり、そのファイルの不正コピーや悪意のあるコピーではないことを確認するために使用されます。デフォルトのミラーにアクセスできない場合や、ミラーが侵害されていないと信頼できない場合は、このリストを変更する必要があります。"
#: ../../configuration.rst:149
msgid ""
"``aqtinstall`` can safely download archive files from the fallback mirror"
" list, and ensure that they are not malicious files, by checking them "
"against the checksums downloaded from the ``trusted_mirrors`` list. "
"``aqtinstall`` uses the SHA-256 algorithm to perform this check."
msgstr "``aqtinstall`` は、フォールバックミラーリストからアーカイブファイルを安全にダウンロードし、``trusted_mirrors`` リストからダウンロードしたチェックサムに照らして、それらが悪意のあるファイルでないことを確認することができます。``aqtinstall`` は、SHA-256アルゴリズムを使ってこのチェックを行います。"
#: ../../configuration.rst:160
msgid "blacklist:"
msgstr "blacklist:"
#: ../../configuration.rst:155
msgid ""
"It is a list of URL where is a problematic mirror site. Some mirror sites"
" ignore a connection from IP addresses out of their preffered one. It "
"will cause connection error or connection timeout. There are some known "
"mirror sites in default. When you are happy with the default sites, you "
"can override with your custom settings."
msgstr "問題のあるミラーサイトがあるURLのリストです。一部のミラーサイトでは、優先されたIPアドレスからの接続以外が無視されます。接続エラーまたは接続タイムアウトが発生します。既定のミラーサイトには既知のものがあります。既定のサイトに問題がなければ、カスタム設定で上書きできます。"
#: ../../configuration.rst:164
msgid "fallbacks:"
msgstr "fallbacks:"
#: ../../configuration.rst:163
msgid ""
"It is a list of URL where is a good for access. When mirror site cause an"
" error, aqt use fallbacks when possible. You can find a list of mirrors "
"at: https://download.qt.io/static/mirrorlist/"
msgstr "アクセスに適したURLの一覧です。ミラーサイトでエラーが発生した場合は、可能な場合はフォールバックを使用してください。ミラーの一覧は次の場所で確認できます: https://download.qt.io/static/mirrorlist/"

View File

@@ -0,0 +1,667 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2019-2021, Hiroshi Miura
# This file is distributed under the same license as the aqtinstall package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2022.
#
msgid ""
msgstr "Project-Id-Version: aqtinstall 3.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-10-09 22:56+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.8.0\n"
#: ../../getting_started.rst:4
msgid "Getting Started"
msgstr "スタートアップガイド"
#: ../../getting_started.rst:6
msgid ""
"``aqt`` is a tool that can be used to install Qt, modules, tools related "
"to Qt, source, docs, and examples, available at https://download.qt.io/. "
"Before running ``aqt``, you will need to tell ``aqt`` exactly what you "
"want it to install. This section of the documentation is meant to walk "
"you through the process of finding out what packages are available to "
"``aqt``, so you can tell ``aqt`` what you want to install."
msgstr "``aqt`` は、Qt、モジュール、Qtに関連するツール、ソース、ドキュメント、サンプルなどをインストールするためのツールで、https://download.qt.io/ から入手できます。``aqt`` を実行する前に、何をインストールしたいのかを正確に ``aqt`` に指示する必要があります。このセクションでは、どのようなパッケージが ``aqt`` に用意されているのかを調べ、何をインストールしたいのかを ``aqt`` に指示できるようにするための手順を説明します。"
#: ../../getting_started.rst:13
msgid ""
"Please note that every ``aqt`` subcommand has a ``--help`` option; please"
" use it if you are having trouble!"
msgstr "すべての ``aqt`` サブコマンドには ``--help`` オプションがあります。なにか疑問が発生した場合は、このオプションを使用してください!"
#: ../../getting_started.rst:18
msgid "Installing Qt"
msgstr "Qtをインストールする"
#: ../../getting_started.rst:20
msgid "General usage of ``aqt`` looks like this:"
msgstr "``aqt``の一般的な使い方は以下のようになります:"
#: ../../getting_started.rst:26
msgid ""
"If you have installed ``aqt`` with pip, you can run it with the command "
"script ``aqt``, but in some cases you may need to run it as ``python -m "
"aqt``. Some older operating systems may require you to specify Python "
"version 3, like this: ``python3 -m aqt``."
msgstr "pipと一緒に``aqt``をインストールしている場合は、コマンドスクリプト``aqt``で実行することができますが、場合によっては``python-m aqt``として実行する必要があるかもしれません。古いオペレーティングシステムでは、``python3-m aqt``のようにPythonバージョン3を指定する必要があるかもしれません。"
#: ../../getting_started.rst:30
msgid "To use ``aqt`` to install Qt, you will need to tell ``aqt`` four things:"
msgstr "Qtをインストールするには、``aqt`` に次の4つのことを伝える必要があります。"
#: ../../getting_started.rst:32 ../../getting_started.rst:410
msgid "The host operating system (windows, mac, or linux)"
msgstr "ホストオペレーティングシステム(Windows、Mac、Linux)"
#: ../../getting_started.rst:33 ../../getting_started.rst:411
msgid "The target SDK (desktop, android, ios, or winrt)"
msgstr "ターゲットSDK(デスクトップ、android、ios、winrt)"
#: ../../getting_started.rst:34
msgid "The version of Qt you would like to install"
msgstr "インストールしたいQtのバージョン"
#: ../../getting_started.rst:35
msgid "The target architecture"
msgstr "ターゲット・アーキテクチャ"
#: ../../getting_started.rst:37
msgid ""
"Keep in mind that Qt for IOS is only available on Mac OS, and Qt for "
"WinRT is only available on Windows."
msgstr "Qt for IOSはMac OSでのみ利用可能であり、Qt for WinRTはWindowsでのみ利用可能であることに注意してください。"
#: ../../getting_started.rst:40
msgid ""
"To find out what versions of Qt are available, you can use the :ref:`aqt "
"list-qt command <list-qt command>`. This command will print all versions "
"of Qt available for Windows Desktop:"
msgstr "利用可能なQtのバージョンを調べるには、 :ref:`aqt list-qt command <list-qt command>` を使うことができます。このコマンドはWindowsデスクトップで利用可能なQtのすべてのバージョンを出力します:"
#: ../../getting_started.rst:57
msgid ""
"Notice that the version numbers are sorted, grouped by minor version "
"number, and separated by a single space-character. The output of all of "
"the :ref:`aqt list-qt <list-qt command>` commands is intended to make it "
"easier for you to write programs that consume the output of :ref:`aqt "
"list-qt <list-qt command>`."
msgstr "バージョン番号がソートされ、マイナーバージョン番号でグループ化され、1つのスペース文字で区切られていることに注意してください。すべての :ref:`aqt list-qt <list-qt command>` コマンドの出力は、 :ref:`aqt list-qt <list-qt command>` の出力を消費するプログラムを作成しやすくするためのものです。"
#: ../../getting_started.rst:62
msgid ""
"Because the :ref:`aqt list-qt <list-qt command>` command directly queries"
" the Qt downloads repository at https://download.qt.io/, the results of "
"this command will always be accurate. The `Available Qt versions`_ wiki "
"page was last modified at some point in the past, so it may or may not be"
" up to date."
msgstr ":ref:`aqt list-qt <list-qt command>` コマンドは https://download.qt.io/ にあるQtダウンロードリポジトリに直接問い合わせますので、このコマンドの結果は常に正確になります。`Available Qt versions`_ wikiページは過去のある時点での更新ですので、最新であるかどうかは保障されません。"
#: ../../getting_started.rst:69
msgid ""
"Now that we know what versions of Qt are available, let's choose version "
"6.2.0."
msgstr "使用可能なQtのバージョンがわかったので、バージョン6.2.0を選択します。"
#: ../../getting_started.rst:71
msgid ""
"The next thing we need to do is find out what architectures are available"
" for Qt 6.2.0 for Windows Desktop. To do this, we can use :ref:`aqt list-"
"qt <list-qt command>` with the ``--arch`` flag:"
msgstr "次にすべきことは、Qt 6.2.0 for Windows Desktopで利用可能なアーキテクチャを見つけることです。これを行うには、:ref:`aqt list-qt <list-qt command>` に ``--arch`` フラグを付けて確認します:"
#: ../../getting_started.rst:80
msgid ""
"Notice that this is a very small subset of the architectures listed in "
"the `Available Qt versions`_ wiki page. If we need to use some "
"architecture that is not on this list, we can use the `Available Qt "
"versions`_ wiki page to get a rough idea of what versions support the "
"architecture we want, and then use :ref:`aqt list-qt <list-qt command>` "
"to confirm that the architecture is available."
msgstr "これは `Available Qt versions`_ wikiページにリストされているアーキテクチャの非常に小さなサブセットであることに注意してください。このリストにないアーキテクチャを使用する必要がある場合は、`Available Qt versions`_ wikiページを使用して、どのバージョンが希望するアーキテクチャをサポートしているかの大まかなアイデアを得てから、 :ref:`aqt list-qt <list-qt command>` を使用して、アーキテクチャが使用可能であることを確認します。"
#: ../../getting_started.rst:86
msgid ""
"Let's say that we want to install Qt 6.2.0 with architecture "
"`win64_mingw81`. The installation command we need is:"
msgstr "Qt 6.2.0を `win64_mingw81` アーキテクチャでインストールしたいとします。必要なインストールコマンドは以下のとおりです。"
#: ../../getting_started.rst:93
msgid ""
"Let's say that we want to install the next version of Qt 6.2 as soon as "
"it is available. We can do this by using a `SimpleSpec <https://python-"
"semanticversion.readthedocs.io/en/latest/reference.html#semantic_version.SimpleSpec>`_"
" instead of an explicit version:"
msgstr "Qt 6.2の次のバージョンが利用可能になったらすぐにインストールしたいとしましょう。これを行うには、明示的なバージョンではなく `SimpleSpec <https://python-semanticversion.readthedocs.io/en/latest/reference.html#semantic_version.SimpleSpec>`_ を使用します。"
#: ../../getting_started.rst:104
msgid "External 7-zip extractor"
msgstr "7-Zip 解凍 外部 コマンド"
#: ../../getting_started.rst:106
msgid ""
"By default, ``aqt`` extracts the 7zip archives stored in the Qt "
"repository using py7zr_, which is installed alongside ``aqt``. You can "
"specify an alternate 7zip command path instead by using the ``-E`` or "
"``--external`` flag. For example, you could use 7-zip_ on a Windows "
"desktop, using this command:"
msgstr "デフォルトでは、``aqt`` はQtリポジトリに保存されている 7-zipアーカイブを、 ``aqt`` と一緒にインストールされている py7zr_ を使って抽出します。代わりに、 ``-E`` または ``--external`` フラグを使って7-zipコマンドパスを指定することもできます。例えば、Windowsデスクトップで次のコマンドを使って 7-zip_ を使うことができます。"
#: ../../getting_started.rst:115
msgid ""
"On Linux, you can specify p7zip_, a Linux port of 7-zip_, which is often "
"installed by default, using this command:"
msgstr "Linuxでは、次のコマンドを使用して p7zip_ (Linuxに移植された 7-zip_ )を指定できます。これはデフォルトでインストールされることが多い 7-zip_ です。"
#: ../../getting_started.rst:127
msgid "Changing the output directory"
msgstr "出力ディレクトリの変更"
#: ../../getting_started.rst:129
msgid ""
"By default, ``aqt`` will install all of the Qt packages into the current "
"working directory, in the subdirectory ``./<Qt version>/<arch>/``. For "
"example, if we install Qt 6.2.0 for Windows desktop with arch "
"`win64_mingw81`, it would end up in ``./6.2.0/win64_mingw81``."
msgstr "デフォルトでは、``aqt`` はすべてのQtパッケージを現在の作業ディレクトリのサブディレクトリ ``./<Qt version>/<arch>/`` にインストールします。例えば、Qt 6.2.0 for Windows desktopをarch `win64_mingw81` でインストールすると、その結果は ``./6.2.0/win64_mingw81`` になります。"
#: ../../getting_started.rst:134
msgid ""
"If you would prefer to install it to another location, you will need to "
"use the ``-O`` or ``--outputdir`` flag. This option also works for all of"
" the other subcommands that begin with ``aqt install-``."
msgstr "別の場所にインストールしたい場合は、``-O`` または ``--outputdir`` フラグを使う必要があります。このオプションは、``aqt install-`` で始まる他のすべてのサブコマンドにも使えます。"
#: ../../getting_started.rst:139
msgid ""
"To install to ``C:\\Qt``, the default directory used by the standard gui "
"installer, you may use this command:"
msgstr "純正のGUIインストーラが使うデフォルトのディレクトリである ``C:\\Qt`` にインストールするには、以下のコマンドを使います:"
#: ../../getting_started.rst:149
msgid "Installing Modules"
msgstr "モジュールのインストール"
#: ../../getting_started.rst:151
msgid ""
"Let's say we need to install some modules for Qt 5.15.2 on Windows "
"Desktop. First we need to find out what the modules are called, and we "
"can do that with :ref:`aqt list-qt <list-qt command>` with the "
"``--modules`` flag. Each version of Qt has a different list of modules "
"for each host OS/ target SDK/ architecture combination, so we will need "
"to supply :ref:`aqt list-qt <list-qt command>` with that information:"
msgstr "Qt 5.15.2用のモジュールをWindows デスクトップにインストールする必要があるとします。まず、モジュールが何と呼ばれているかを調べる必要があります。そのためには :ref:`aqt list-qt <list-qt command>` と ``--modules`` フラグを使用します。Qtの各バージョンには、ホストOS/ターゲットSDK/アーキテクチャの組み合わせごとに異なるモジュールリストがあるので、その情報を :ref:`aqt list-qt <list-qt command>` に提供する必要があります:"
#: ../../getting_started.rst:163
msgid ""
"Let's say that we want to know more about these modules before we install"
" them. We can use the ``--long-modules`` flag for that:"
msgstr "これらのモジュールをインストールする前に、これらのモジュールについてもっと知りたいとしましょう。そのためには ``--long-modules`` フラグを使うことができます:"
#: ../../getting_started.rst:183
msgid ""
"Note that if your terminal is wider than 95 characters, this command will"
" show release dates and sizes in extra columns to the right. If you try "
"this, you will notice that `debug_info` is 5.9 gigabytes installed."
msgstr "端末の表示幅が95文字以上の場合、このコマンドはリリース日とサイズを右側のスペースに表示します。これを試してみると、``debug_info`` では、5.9ギガバイトがインストールされることに気付くでしょう。"
#: ../../getting_started.rst:187
msgid ""
"Let's say that we want to install `qtcharts` and `qtnetworkauth`. We can "
"do that by using the `-m` flag with the :ref:`aqt install-qt <qt "
"installation command>` command. This flag receives the name of at least "
"one module as an argument:"
msgstr "``qtcharts``と ``qtnetworkauth`` をインストールしたいとします。これは :ref:`aqt install-qt <qt installation command>` コマンドで ``-m`` フラグを使うことでできます。このフラグは少なくとも1つのモジュールの名前を引数として受け取ります:"
#: ../../getting_started.rst:195
msgid ""
"If we wish to install all the modules that are available, we can do that "
"with the ``all`` keyword:"
msgstr "利用可能なすべてのモジュールをインストールしたい場合は、``all`` キーワードでインストールできます。"
#: ../../getting_started.rst:201
msgid ""
"Remember that the :ref:`aqt list-qt <list-qt command>` command is meant "
"to be scriptable? One way to install all modules available for Qt 5.15.2 "
"is to send the output of :ref:`aqt list-qt <list-qt command>` into "
":ref:`aqt install-qt <qt installation command>`, like this:"
msgstr ":ref:`aqt list-qt <list-qt command>` コマンドは、スクリプト化できるように意図して作られていることを覚えていますか?Qt 5.15.2で利用可能なすべてのモジュールをインストールする1つの方法は :ref:`aqt list-qt <list-qt command>` の出力を :ref:`aqt install-qt <qt installation command>` に以下のように送ることです:"
#: ../../getting_started.rst:210
msgid ""
"You will need a Unix-style shell to run this command, or at least git-"
"bash on Windows. The ``xargs`` equivalent to this command is an exercise "
"left to the reader."
msgstr "このコマンドを実行するにはUnixスタイルのシェルが必要ですし、Windowsでは少なくともgit-bashが必要です。この ``xargs`` に相当するコマンドは、読者の練習課題です。"
#: ../../getting_started.rst:213
msgid ""
"If you want to install all available modules, you are probably better off"
" using the ``all`` keyword, as discussed above. This scripting example is"
" presented to give you a sense of how to accomplish something more "
"complicated. Perhaps you want to install all modules except "
"`qtnetworkauth`; you could write a script that removes `qtnetworkauth` "
"from the output of :ref:`aqt list-qt <list-qt command>`, and pipe that "
"into :ref:`aqt install-qt <qt installation command>`. This exercise is "
"left to the reader."
msgstr "利用可能なモジュールをすべてインストールしたい場合は、上で説明したように、「all」キーワードを使った方が良いでしょう。このスクリプト例は、より複雑なことを実現する方法を理解するためのものです。:ref:`aqt list-qt <list-qt command>` の出力から `qtnetworkauth` を削除するスクリプトを書いて、それを :ref:`aqt install-qt <qt installation command>` にパイプで渡すことができます。これは読者の練習課題です。"
#: ../../getting_started.rst:223
msgid "Installing Qt for Android"
msgstr "Android用Qtのインストール"
#: ../../getting_started.rst:225
msgid ""
"Let's install Qt for Android. Installing Qt 5 will be similar to "
"installing Qt for Desktop on Windows, but there will be differences when "
"we get to Qt 6."
msgstr "Qt for Androidをインストールしてみましょう。Qt 5のインストールはWindows上のQt for Desktopのインストールと似ていますが、Qt 6では違いがあります。"
#: ../../getting_started.rst:243
msgid ""
"Let's see what happens when we try to list architectures and modules for "
"Qt 6:"
msgstr "Qt 6のアーキテクチャとモジュールをリストアップしようとすると何が起こるか見てみましょう。"
#: ../../getting_started.rst:257
msgid ""
"The Qt 6 for Android repositories are a little different than the Qt 5 "
"repositories, and the :ref:`aqt list-qt <list-qt command>` tool doesn't "
"know where to look for modules and architectures if you don't tell it "
"what architecture you need. I know, it sounds a little backwards, but "
"that's how the Qt repo was put together."
msgstr "Qt 6 for AndroidリポジトリはQt 5リポジトリとは少し異なり、 :ref:`aqt list-qt <list-qt command>` ツールは、必要なアーキテクチャを教えなければ、モジュールやアーキテクチャを探す場所を知りません。少し機能後退したように聞こえますが、それがQtリポジトリが組み立てられた方法です。"
#: ../../getting_started.rst:262
msgid ""
"There are four architectures available, and the error message from "
":ref:`aqt list-qt <list-qt command>` just told us what they are: "
"`x86_64`, `x86`, `armv7`, and `arm64_v8a`."
msgstr "利用可能なアーキテクチャは4つありますが、:ref:`aqt list-qt <list-qt command>` のエラーメッセージが、その4つを教えてくれます: `x86_64`、`x86`、`armv7`、`arm64_v8a`です。"
#: ../../getting_started.rst:265
msgid ""
"We know we want to use `armv7` for the architecture, but we don't know "
"exactly what value for 'architecture' we need to pass to :ref:`aqt "
"install-qt <qt installation command>` yet, so we will use :ref:`aqt list-"
"qt <list-qt command>` again:"
msgstr "アーキテクチャに ``armv7`` を使いたいことはわかっていますが、:ref:`aqt install-qt <qt installation command>` に渡す必要のある'アーキテクチャ'の値が正確にはまだ分からないので、もう一度 :ref:`aqt list-qt <list-qt command>` を使います:"
#: ../../getting_started.rst:274
msgid ""
"You should be thinking, \"Well, that was silly. All it did was add "
"`android_` to the beginning of the architecture I gave it. Why do I need "
"to use ``aqt list-qt --arch`` for that?\" The answer is, ``aqt list-qt "
"--arch`` is checking to see what actually exists in the Qt repository. If"
" it prints an error message, instead of the obvious `android_armv7`, we "
"would know that Qt 6.2.0 for that architecture doesn't exist for some "
"reason, and any attempt to install it with :ref:`aqt install-qt <qt "
"installation command>` will fail."
msgstr "「ばかげている」そう思われるかもしれません。「私が引数に付与したアーキテクチャの最初に `android_` を 追加しただけだ。なぜそのために`aqt list-qt--arch`を使う必要があるのか?」おそらく、そう考えるでしょう。 その答えは、``aqt list-qt-arch`` はQtリポジトリに実際に何が存在するかをチェックしているということです。期待した ``android_armv7`` の出力ではなくエラーメッセージが出力された場合、Qt 6.2.0のそのアーキテクチャ用のパッケージが何らかの理由で存在しないことがわかります。そのため、:ref:`aqt install-qt <qt installation command>`でインストールしようとすると失敗します。"
#: ../../getting_started.rst:282
msgid ""
"If we want to install Qt 6.2.0 for armv7, we use this command to print "
"available modules:"
msgstr "armv7用のQt 6.2.0をインストールしたい場合は、次のコマンドを使って利用可能なモジュールを出力します。"
#: ../../getting_started.rst:292
msgid ""
"Finally, let's install Qt 6.2.0 for Android armv7 with the ``qtcharts`` "
"and ``qtnetworkauth`` modules:"
msgstr "最後に、``qtcharts`` と ``qtnetworkauth`` モジュールとともに、Qt 6.2.0 for Android armv7をインストールしましょう。"
#: ../../getting_started.rst:299
msgid ""
"Please note that when you install Qt for android or ios, the installation"
" will not be functional unless you install the corresponding desktop "
"version of Qt alongside it. You can do this automatically with the "
"``--autodesktop`` flag:"
msgstr "Qt for androidまたはiosをインストールする場合、対応するデスクトップバージョンのQtを一緒にインストールしない限り、正しく機能しないことに注意してください。``--autodesktop`` フラグをつけることで、自動的にデスクトップバージョンのインストールを実行できます:"
#: ../../getting_started.rst:308
msgid "Installing Qt for WASM"
msgstr "WASM用Qtのインストール"
#: ../../getting_started.rst:310
msgid ""
"To find out how to install Qt for WASM, we need to tell :ref:`aqt list-qt"
" <list-qt command>` that we are using the `wasm` architecture. We can do "
"that by using the ``--extension wasm`` flag."
msgstr "Qt for WASMをインストールする方法を知るためには、:ref:`aqt list-q t<list-qt command>` に、私たちが ``wasm`` アーキテクチャを使いたい、ということを伝える必要があります。``--extension wasm`` フラグを使うことで、指定できます。"
#: ../../getting_started.rst:320
msgid ""
"There are only a few versions of Qt that support WASM, and they are only "
"available for desktop targets. If we tried this command with `android`, "
"`winrt`, or `ios` targets, we would have seen an error message."
msgstr "WASMをサポートするQtのバージョンはわずかしかなく、デスクトップターゲットでのみ利用できます。このコマンドを`android`、`winrt`、`ios`ターゲットで実行すると、エラーメッセージが表示されます。"
#: ../../getting_started.rst:324
msgid "We can check the architecture and modules available as before:"
msgstr "以前と同様に、利用可能なアーキテクチャとモジュールを確認できます。"
#: ../../getting_started.rst:335
msgid "We can install Qt for WASM as before:"
msgstr "以前と同じようにQt for WASMをインストールできます。"
#: ../../getting_started.rst:343
msgid "Installing Tools"
msgstr "ツールをインストールする"
#: ../../getting_started.rst:345
msgid ""
"Let's find out what tools are available for Windows Desktop by using the "
":ref:`aqt list-tool <list-tool command>` command:"
msgstr ":ref:`aqt list-tool <list-tool command>` コマンドを使って、Windows Desktopで利用できるツールを調べてみましょう。"
#: ../../getting_started.rst:364
msgid "Let's see what tool variants are available in `tools_mingw`:"
msgstr "``tools_mingw`` で利用できるツールのバリエーションを見てみましょう:"
#: ../../getting_started.rst:380
msgid ""
"This gives us a list of things that we could install using :ref:`aqt "
"install-tool <tools installation command>`. Let's see some more details, "
"using the ``-l`` or ``--long`` flag:"
msgstr "このコマンドの出力は、以下の :ref:`aqt install-tool <Tools installation command>` で使える値のリストになります。以下のように、``--l`` または ``--long`` フラグを使用して詳細を調べてみましょう。"
#: ../../getting_started.rst:401
msgid ""
"The ``-l`` flag causes :ref:`aqt list-tool <list-tool command>` to print "
"a table that shows plenty of data pertinent to each tool variant "
"available in `tools_mingw`. :ref:`aqt list-tool <list-tool command>` "
"additionally prints the 'Display Name' and 'Description' for each tool if"
" your terminal is wider than 95 characters; terminals that are narrower "
"than this cannot display this table in a readable way."
msgstr ":ref:`aqt list-tool <list-tool command>` は、``tools_mingw`` で利用可能な各ツールに関連する、豊富なデータが含まれるテーブルを出力します。:ref:`aqt list-tool <list-tool command>` は、端末の幅が95文字より広い場合、各ツールの 「表示名」と「説明」を出力します。これより表示幅の狭い端末では、このテーブルを読みやすい形で表示することはできません。"
#: ../../getting_started.rst:407
msgid ""
"Now let's install `mingw`, using the :ref:`aqt install-tool <tools "
"installation command>` command. This command receives four parameters:"
msgstr "では、:ref:`aqt install-tool <tools installation command>` コマンドを使って`mingw`をインストールしましょう。このコマンドは4つのパラメータを受け取ります:"
#: ../../getting_started.rst:412
msgid "The name of the tool (this is `tools_mingw` in our case)"
msgstr "ツールの名前(この例では`tools_mingw`です)"
#: ../../getting_started.rst:413
msgid ""
"(Optional) The tool variant name. We saw a list of these when we ran "
":ref:`aqt list-tool <list-tool command>` with the `tool name` argument "
"filled in."
msgstr "(オプション)ツールのバリアント名。:ref:`aqt list-tool <list-tool command>` を`tool name` 引数つきで実行したときに、リストに表示されます。"
#: ../../getting_started.rst:416
msgid "To install `mingw`, you could use this command (please don't):"
msgstr "`mingw`をインストールするためには、以下のコマンドを使えます(が、使わないでください):"
#: ../../getting_started.rst:422
msgid ""
"Using this command will install every tool variant available in "
"`tools_mingw`; in this case, you would install 10 different versions of "
"the same tool. For some tools, like `qtcreator` or `ifw`, this is an "
"appropriate thing to do, since each tool variant is a different program. "
"However, for tools like `mingw` and `vcredist`, it would make more sense "
"to use :ref:`aqt list-tool <list-tool command>` to see what tool variants"
" are available, and then install just the tool variant you are interested"
" in, like this:"
msgstr "このコマンドを使用すると、`tools_mingw` で利用可能なすべてのツールバリエーションがインストールされます。この場合、同じツールの10種類の異なるバージョンをインストールすることになります。``qtcreator`` や ``ifw`` のようないくつかのツールでは、それぞれのツールバリエーションが異なるプログラムなので、これは適切なことです。。しかし、``mingw``や``vcredist``のようなツールでは、:ref:`aqt list-tool <list-tool command>` を使ってどんなバリエーションが利用可能か調べてから、必要なツールのバリエーションだけをインストールする方が理にかなっています:"
#: ../../getting_started.rst:435
msgid ""
"Please note that ``aqt install-tool`` does not recognize the "
"``installscript.qs`` related to each tool. When you install these tools "
"with the standard gui installer, the installer may use the "
"``installscript.qs`` script to make additional changes to your system. If"
" you need those changes to occur, it will be your responsibility to make "
"those changes happen, because ``aqt`` is not capable of running this "
"script."
msgstr "``aqt install-tool`` は、各ツールに関連する``installscript.qs`` を認識しないことに注意してください。これらのツールを標準のGUIインストーラでインストールする場合、インストーラは``installscript.qs`` スクリプトを使ってシステムに追加の変更を加えることができます。これらの変更が必要な場合、``aqt`` はこのスクリプトを実行することができないので、変更を加えるのはあなたの責任になります。"
#: ../../getting_started.rst:443
msgid "Installing a subset of Qt archives [Advanced]"
msgstr "Qtアーカイブのサブセットをインストールする[上級編]"
#: ../../getting_started.rst:446
msgid "Introduction"
msgstr "はじめに"
#: ../../getting_started.rst:448
msgid ""
"You may have noticed that by default, ``aqt install-qt`` installs a lot "
"of archives that you may or may not need, and a typical installation can "
"take up more disk space than necessary. If you installed the module "
"``debug_info``, it may have installed more than 1 gigabyte of data. This "
"section will help you to reduce the footprint of your Qt installation."
msgstr "お気づきかもしれませんが、デフォルトでは ``aqt install-qt`` は多くのアーカイブをインストールしますが、その必要はないかもしれませんし、一般的なインストールでは必要以上のディスク容量を消費します。モジュール ``debug_info`` をインストールした場合、1 GB以上のデータがインストールされている可能性があります。この節では、Qtインストールのフットプリントを減らすための手助けをします。"
#: ../../getting_started.rst:456
msgid ""
"Be careful about using the ``--archives`` flag; it is marked `Advanced` "
"for a reason! It is very easy to misuse this command and end up with a Qt"
" installation that is missing the components that you need. Don't use it "
"unless you know what you are doing!"
msgstr "``--archives`` フラグの使用には注意してください。`Advanced` とマークされているのは理由があります! このコマンドを誤用しますと、必須コンポーネントがない不完全なQtインストール結果になります。自分が何をしているのかわかっていない限り、使用しないでください!"
#: ../../getting_started.rst:463
msgid "Minimum Qt Installation"
msgstr "Qtの最小インストール"
#: ../../getting_started.rst:465
msgid ""
"Normally, when you run ``aqt install-qt``, the program will print a long "
"list of archives that it is downloading, extracting, and installing, "
"including ``qtbase``, ``qtmultimedia``, ``qt3d``, and ~25 more items. We "
"can use the ``--archives`` flag to choose which of these archives we will"
" actually install. The ``--archives`` flag can only affect two modules: "
"the base Qt installation and the ``debug_info`` module."
msgstr "通常、``aqt install-qt`` を実行すると、このプログラムはダウンロード、抽出、インストールしているアーカイブの長いリストを出力します。このリストには、``qtbase``、``qtmultimedia``、``qt3d``、そして約25項目が含まれています。これらのアーカイブのどれを実際にインストールするかは、``--archives`` フラグを使って選択することができます。 ``--archives`` フラグは、Qtの基本インストールモジュールと``debug_info``モジュールの2つのモジュールにしか影響しません。"
#: ../../getting_started.rst:473
msgid ""
"In this documentation, **\"modules\"**, **\"archives\"**, and **\"the "
"base Qt installation\"** refer to different things, and are defined here:"
msgstr "このドキュメントでは、**\"modules\"**, **\"archives\"**, **\"base Qt installation\"** はそれぞれ別のものを指しており、ここで定義されています:"
#: ../../getting_started.rst:476
msgid ""
"**Archives**: In this context, an **archive** is a bundle of files "
"compressed with the 7zip algorithm. It exists on a disk drive as a file "
"with the extension ``.7z``."
msgstr "**Archives**: このコンテキストでは、**Archive** は 7-zipで圧縮されたファイルのバンドルです。これはディスクドライブ上に拡張子``.7z``\"のファイルとして存在します。"
#: ../../getting_started.rst:480
msgid ""
"**Modules**: The Qt repository organizes groups of archives into modules."
" A **module** contains one or more **archives**."
msgstr "**Modules**: Qtリポジトリが一連のアーカイブをモジュールとして編成しています。**module** には、ひとつか複数の **archives** が含まれます。"
#: ../../getting_started.rst:483
msgid ""
"**the base Qt installation**: By definition, this is just another "
"**module** that contains 20-30 **archives**. This documentation refers to"
" it as **the base Qt installation** instead of a **module** for several "
"reasons:"
msgstr "**the base Qt installation**: 定義上、これは20から30の**archives** を含む単なる **module** です。このドキュメントでは、さまざまな事情から**module**ではなく、 **the base Qt installation** とよんでいます。"
#: ../../getting_started.rst:488
msgid "The ``aqt install-qt`` installs this module by default."
msgstr "``aqt install-qt`` はデフォルトでこのモジュールをインストールします。"
#: ../../getting_started.rst:489
msgid "You cannot specify this module with ``aqt install-qt --modules``."
msgstr "このモジュールを``aqt install-qt --modules`` で指定することはできません。"
#: ../../getting_started.rst:490
msgid ""
"The ``aqt list-qt --modules`` command is incapable of printing this "
"module."
msgstr "``aqt list-qt--modules`` コマンドはこのモジュールの説明を表示できません。"
#: ../../getting_started.rst:491
msgid ""
"``aqt`` transforms the names of modules as they exist in the Qt "
"repository so that they are easier to read and write. If the name of "
"**the base Qt installation** were transformed using the same rules, the "
"name would be empty."
msgstr "``aqt`` はQtリポジトリに存在するモジュールの名前を読みやすく書きやすくするために変換します。**the base Qt installation** の名前を同じ規則を使って変換された場合、名前は空になります。"
#: ../../getting_started.rst:496
msgid ""
"The fully-qualified name of the **base Qt installation** module is "
"usually something like ``qt.qt6.620.gcc_64``. The fully-qualified name of"
" the ``qtcharts`` module could be something like "
"``qt.qt6.620.qtcharts.gcc_64``. It would be difficult to read and write a"
" list of 20 modules with the prefix ``qt.qt6.620.`` and the suffix "
"``.gcc_64``, because these parts are repetitive and not meaningful. Only "
"the ``qtcharts`` part is useful."
msgstr "**base Qt installation** モジュールの完全修飾名は通常、``qt.qt6.620.gcc_64`` のようなものです。``qtcharts`` モジュールの完全修飾名は通常、``qt.qt6.620.qtcharts.gcc_64`` のようなものです。プレフィックス ``qt.qt6.620.``とサフィックス``.gcc_64``を持つ20個のモジュールのリストを読み書きするのは難しいでしょう。なぜならこれらの部分は反復的で意味がないからです。ただ``qtcharts`` の部分だけが役に立つからです。"
#: ../../getting_started.rst:504
msgid ""
"Let's say that we want to install Qt 5.15.2 for Linux desktop, using the "
"gcc_64 architecture. The ``qtbase`` archive includes the bare minimum for"
" a working Qt installation, and we can install it alone with the "
"``--archives`` flag:"
msgstr "gcc_64アーキテクチャを使ってQt 5.15.2をLinuxデスクトップにインストールしたいとしましょう。``qtbase`` アーカイブには、動作中のQtインストールに最低限必要なものが含まれています。また、``--archives`` フラグを付けて単独でインストールすることもできます。"
#: ../../getting_started.rst:512
msgid ""
"This time, ``aqt install-qt`` will only install one archive, ``qtbase``, "
"instead of the ~27 archives it installs by default."
msgstr "今回、``aqt install-qt``は、デフォルトでインストールされる約27のアーカイブではなく、``qtbase``という1つのアーカイブだけをインストールします。"
#: ../../getting_started.rst:516
msgid "Installing More Than The Bare Minimum"
msgstr "最小インストール数を超えるインストール"
#: ../../getting_started.rst:518
msgid ""
"Let's say that the ``qtbase`` archive is missing some features that you "
"need. Using the ``--archives qtbase`` flag causes ``aqt install-qt`` to "
"omit roughly 27 archives. We can print a list of these archives with the "
"``aqt list-qt --archives`` command:"
msgstr "``qtbase``アーカイブに必要な機能が欠けているとします。``--archives qtbase``フラグを使用すると、``aqt install-qt``は約27のアーカイブを省略します。``aqt list-qt --archives``コマンドでこれらのアーカイブのリストを表示することができます:"
#: ../../getting_started.rst:530
msgid ""
"Here, we have used the ``--archives`` flag with two arguments: the "
"version of Qt we are interested in, and the architecture we are using. As"
" a result, the command printed a list of archives that are part of the "
"base (non-minimal) Qt installation."
msgstr "ここでは、関心のあるQtのバージョンと使用しているアーキテクチャの2つの引数を持つ``--archives``フラグを使用しました。その結果、コマンドはベース(最小ではない)Qtインストールの一部であるアーカイブのリストを出力しました。"
#: ../../getting_started.rst:535
msgid ""
"Let's say we need to use ``qtmultimedia``, ``qtdeclarative``, ``qtsvg``, "
"and nothing else. Remember that the ``qtbase`` archive is required for a "
"minimal working Qt installation. We can install these archives using this"
" command:"
msgstr "``qtmultimedia``、``qtdeclarative``、``qtsvg``を使う必要があり、それ以外は何も使わないとしましょう。``qtbase``アーカイブは最低限動作するQtインストールに必要であることを覚えておいてください。これらのアーカイブは次のコマンドを使ってインストールできます:"
#: ../../getting_started.rst:544
msgid "Installing Modules With Archives Specified"
msgstr "アーカイブを指定してモジュールをインストールする"
#: ../../getting_started.rst:546
msgid ""
"As of aqt v2.1.0, the ``--archives`` flag will only apply to the base Qt "
"installation and to the ``debug_info`` module. Previous versions of aqt "
"required that when installing modules with the ``--archives`` flag, the "
"user must specify archives for each module, otherwise they would not be "
"installed. This behavior has been changed to prevent such mistakes."
msgstr "aqt v2.1.0以降では、``--archives``フラグはQtの基本インストールと``debug_info``モジュールにのみ適用されます。aqtの以前のバージョンでは、``--archives``フラグを付けてモジュールをインストールする場合、ユーザはモジュールごとにアーカイブを指定する必要がありました。指定しないとインストールされませんでした。このようなミスを防止するために、この動作を変更しました。"
#: ../../getting_started.rst:552
msgid ""
"Let's say that we need to install the bare minimum Qt 5.15.2, with the "
"modules ``qtcharts`` and ``qtlottie``:"
msgstr "モジュール``qtcharts``と``qtlottie``を使って、最低限のQt 5.15.2をインストールする必要があるとしましょう。"
#: ../../getting_started.rst:558
msgid ""
"This command will successfully install 3 archives: 1 for ``qtbase``, and "
"one each for the two modules. If we had tried to use this command with "
"previous versions of aqt, we would not have installed the two modules "
"because we did not specify them in the ``--archives`` list."
msgstr "このコマンドは3つのアーカイブを正しくインストールします。1つは``qtbase``用で、もう1つは2つのモジュール用です。このコマンドをaqtの以前のバージョンで使用しようとすると、2つのモジュールは``--archives``リストに指定されていなかったので、インストールされませんでした。"
#: ../../getting_started.rst:564
msgid ""
"You can still misuse the ``--archives`` flag by omitting the ``qtbase`` "
"archive, or by omitting archives that another archive or module is "
"dependent on. You may not notice that there is a problem until you try to"
" compile a program, and compilation fails."
msgstr "``qtbase``アーカイブを省略したり、他のアーカイブやモジュールが依存しているアーカイブを省略することで、``--archives``フラグを誤用することもできます。プログラムをコンパイルしようとしてコンパイルが失敗するまで、問題があることに気づかないかもしれません。"
#: ../../getting_started.rst:570
msgid "Installing the ``debug_info`` module"
msgstr "``debug_info``モジュールのインストール"
#: ../../getting_started.rst:572
msgid ""
"Now let's say we need to install the ``debug_info`` module, which is "
"particularly large: around one gigabyte. We do not want to install all of"
" it, so we can use ``aqt install-qt --archives`` to choose which archives"
" we want to install. Remember that the ``--archives`` flag"
msgstr "ここで、``debug_info``モジュールをインストールする必要があるとしましょう。このモジュールは非常に大きく、約1.0GBです。すべてをインストールしたくないので、``aqt install-qt --archives``を使ってインストールしたいアーカイブを選ぶことができます。この場合の``--archives``フラグは"
#: ../../getting_started.rst:577
msgid ""
"``aqt list-qt --archives`` to print which archives are part of the "
"``debug_info`` module:"
msgstr "``aqt list-qt --archives``で、どのアーカイブが``debug_info``モジュールの一部であるかを表示します。"
#: ../../getting_started.rst:589
msgid ""
"This is a lot of archives. Note that there's a name collision between the"
" ``debug_info`` archives and the archives in every other module/Qt base "
"install: this is because there's a ``debug_info`` archive that "
"corresponds to almost every other archive available."
msgstr "ここにはたくさんのアーカイブがあります。``debug_info``アーカイブと他のすべてのモジュール/Qtベースインストールのアーカイブとの間に名前の衝突があることに注意してください。これは、利用可能な他のほとんどすべてのアーカイブに対応する``debug_info``アーカイブがあるからです。"
#: ../../getting_started.rst:595
msgid ""
"Let's install Qt with ``qtcharts`` and ``debug_info`` with some archives "
"specified:"
msgstr "``qtcharts``と``debug_info``つきでQtをインストールし、いくつかのアーカイブを指定しましょう。"
#: ../../getting_started.rst:602
msgid ""
"Notice what we did here: We specified the ``qtcharts`` and ``debug_info``"
" modules, and we specified the ``qtbase``, ``qtcharts``, and "
"``qtdeclarative`` archives. This will install a total of 6 archives:"
msgstr "ここで行ったことに注目してください:``qtcharts`` モジュールと``debug_info``モジュールを指定し、``qtbase``アーカイブ、``qtcharts``アーカイブ、``qtdeclarative`` アーカイブを指定しました。これで合計6つのアーカイブがインストールされます:"
#: ../../getting_started.rst:606
msgid ""
"the 3 archives named ``qtbase``, ``qtcharts``, and ``qtdeclarative`` from"
" the ``debug_info`` module,"
msgstr "``debug_info``モジュールからの3つのアーカイブ ``qtbase``、``qtcharts``、``qtdeclarative``"
#: ../../getting_started.rst:607
msgid "the 1 archive ``qtcharts`` from the ``qtcharts`` module, and"
msgstr "``qtcharts``モジュールからのアーカイブ``qtcharts``、および"
#: ../../getting_started.rst:608
msgid ""
"the 2 archives ``qtbase`` and ``qtdeclarative`` from the base Qt "
"installation."
msgstr "基本Qtインストールの``qtbase``と``qtdeclarative``の2つのアーカイブです。"
#: ../../getting_started.rst:611
msgid ""
"At present, ``aqt install-qt`` is incapable of installing any archive "
"from the ``debug_info`` module without also installing the corresponding "
"module from the base Qt installation. For instance, you cannot install "
"the ``debug_info`` archive for ``qtbase`` without also installing the "
"usual ``qtbase`` archive."
msgstr "現在、``aqt install-qt``は、基本Qtインストールから対応するモジュールをインストールせずに、``debug_info`` モジュールからアーカイブをインストールすることはできません。例えば、通常の``qtbase``アーカイブをインストールせずに、``qtbase``用の``debug_info`` アーカイブをインストールすることはできません。"

View File

@@ -0,0 +1,41 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2019-2021, Hiroshi Miura
# This file is distributed under the same license as the aqtinstall package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2022.
#
msgid ""
msgstr "Project-Id-Version: aqtinstall 3.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-10-09 22:56+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.8.0\n"
#: ../../index.rst:2
msgid "aqtinstall manual"
msgstr ""
#: ../../index.rst:4
msgid "Contents:"
msgstr ""
#: ../../index.rst:20
msgid "Indices and tables"
msgstr ""
#: ../../index.rst:22
msgid ":ref:`genindex`"
msgstr ""
#: ../../index.rst:23
msgid ":ref:`modindex`"
msgstr ""
#: ../../index.rst:24
msgid ":ref:`search`"
msgstr ""

View File

@@ -0,0 +1,147 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2019-2021, Hiroshi Miura
# This file is distributed under the same license as the aqtinstall package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2022.
#
msgid ""
msgstr "Project-Id-Version: aqtinstall 3.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-10-09 22:56+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.8.0\n"
#: ../../installation.rst:6
msgid "Installation"
msgstr "インストール"
#: ../../installation.rst:9
msgid "Requirements"
msgstr "要件"
#: ../../installation.rst:11
msgid "Minimum Python version: 3.6"
msgstr "Pythonの最小バージョン:3.6"
#: ../../installation.rst:12
msgid "Recommended Python version: 3.7.5 or later"
msgstr "推奨Pythonバージョン:3.7.5以降"
#: ../../installation.rst:14
msgid ""
"Dependent libraries: requests, py7zr, semantic_version, patch, texttable,"
" bs4"
msgstr "依存ライブラリ:requests,py7zr,semantic_version,patch,texttable,bs4"
#: ../../installation.rst:18
msgid "Install by pip command"
msgstr "pipコマンドによるインストール"
#: ../../installation.rst:20
msgid "Same as usual, it can be installed with `pip`"
msgstr "いつもと同じように、``pip`` でインストールできます。"
#: ../../installation.rst:29
msgid "Command changes"
msgstr "コマンドの変更"
#: ../../installation.rst:31
msgid ""
"From version 2.0.0, sub commands are changed. The previous versions of "
"these sub commands have been retained for backwards compatibility, but "
"are no longer recommended."
msgstr "バージョン2.0.0から、サブコマンドが変更されました。これらのサブコマンドの以前のバージョンは、下位互換性のために保持されていますが、お勧めできません。"
#: ../../installation.rst:36
msgid "New sub commands"
msgstr "新しいサブコマンド"
#: ../../installation.rst:36
msgid "Legacy sub commands"
msgstr "レガシーサブコマンド"
#: ../../installation.rst:36
msgid "Note"
msgstr "Note"
#: ../../installation.rst:38
msgid "install-qt"
msgstr "install-qt"
#: ../../installation.rst:38
msgid "install"
msgstr "install"
#: ../../installation.rst:38 ../../installation.rst:45
#: ../../installation.rst:49 ../../installation.rst:54
msgid "Version moved after target"
msgstr "バージョンはターゲットの後に移動しました"
#: ../../installation.rst:40
msgid "install-tool"
msgstr "install-tool"
#: ../../installation.rst:40
msgid "tool"
msgstr "tool"
#: ../../installation.rst:40
msgid "Arguments are changed"
msgstr "引数が変更されました"
#: ../../installation.rst:42
msgid "New syntax doesn't take version"
msgstr "新しい構文はバージョンを使用しません"
#: ../../installation.rst:45
msgid "install-example"
msgstr "install-example"
#: ../../installation.rst:45
msgid "examples"
msgstr "examples"
#: ../../installation.rst:47
msgid "Caution with last (s)"
msgstr "最後の引数に注意"
#: ../../installation.rst:49
msgid "install-src"
msgstr "install-src"
#: ../../installation.rst:49
msgid "src"
msgstr "src"
#: ../../installation.rst:51
msgid "New command only can take --kde option"
msgstr "新しいコマンドは--kdeオプションしか使えません"
#: ../../installation.rst:54
msgid "install-doc"
msgstr "install-doc"
#: ../../installation.rst:54
msgid "doc"
msgstr "doc"
#: ../../installation.rst:56
msgid "list"
msgstr "list"
#: ../../installation.rst:56
msgid "Legacy list commands are removed."
msgstr "従来のリストコマンドは削除されました。"
#: ../../installation.rst:59
msgid "list-qt"
msgstr "list-qt"
#: ../../installation.rst:61
msgid "list-tool"
msgstr "list-tool"

View File

@@ -0,0 +1,203 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2019-2021, Hiroshi Miura
# This file is distributed under the same license as the aqtinstall package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: aqtinstall 3.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-10-09 22:56+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../../CODE_OF_CONDUCT.rst:3
msgid "Contributor Covenant Code of Conduct"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:6
msgid "Our Pledge"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:8
msgid "We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation."
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:15
msgid "We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community."
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:19
msgid "Our Standards"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:21
msgid "Examples of behavior that contributes to a positive environment for our community include:"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:24
msgid "Demonstrating empathy and kindness toward other people"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:25
msgid "Being respectful of differing opinions, viewpoints, and experiences"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:26
msgid "Giving and gracefully accepting constructive feedback"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:27
msgid "Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:29
msgid "Focusing on what is best not just for us as individuals, but for the overall community"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:32
msgid "Examples of unacceptable behavior include:"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:34
msgid "The use of sexualized language or imagery, and sexual attention or advances of any kind"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:36
msgid "Trolling, insulting or derogatory comments, and personal or political attacks"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:37
msgid "Public or private harassment"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:38
msgid "Publishing others' private information, such as a physical or email address, without their explicit permission"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:40
msgid "Other conduct which could reasonably be considered inappropriate in a professional setting"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:44
msgid "Enforcement Responsibilities"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:46
msgid "Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful."
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:51
msgid "Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate."
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:57
msgid "Scope"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:59
msgid "This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event."
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:66
msgid "Enforcement"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:68
msgid "Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at Hiroshi Miura <miurahr@linux.com>. All complaints will be reviewed and investigated promptly and fairly."
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:73
msgid "All community leaders are obligated to respect the privacy and security of the reporter of any incident."
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:77
msgid "Enforcement Guidelines"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:79
msgid "Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:83
msgid "Phase 1. Correction"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:87
#: ../../CODE_OF_CONDUCT.rst:98
#: ../../CODE_OF_CONDUCT.rst:112
#: ../../CODE_OF_CONDUCT.rst:127
msgid "**Community Impact**:"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:86
msgid "Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community."
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:92
#: ../../CODE_OF_CONDUCT.rst:106
#: ../../CODE_OF_CONDUCT.rst:119
#: ../../CODE_OF_CONDUCT.rst:131
msgid "**Consequence**:"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:90
msgid "A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested."
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:95
msgid "Phase 2. Warning"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:98
msgid "A violation through a single incident or series of actions."
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:101
msgid "A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban."
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:109
msgid "Phase 3. Temporary Ban"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:112
msgid "A serious violation of community standards, including sustained inappropriate behavior."
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:115
msgid "A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban."
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:122
msgid "Phase 4. Permanent Ban"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:125
msgid "Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals."
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:130
msgid "A permanent ban from any sort of public interaction within the community."
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:134
msgid "Attribution"
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:136
msgid "This Code of Conduct is adapted from the `Contributor Covenant`_ version 2.0. You can take it from Contributor Covenant `homepage`_."
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:139
msgid "Community Impact Guidelines were inspired by `Mozilla's code of conduct enforcement ladder`_."
msgstr ""
#: ../../CODE_OF_CONDUCT.rst:141
msgid "For answers to common questions about this code of conduct, see the `FAQ`_ or its translations_."
msgstr ""

View File

@@ -0,0 +1,81 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2019-2021, Hiroshi Miura
# This file is distributed under the same license as the aqtinstall package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: aqtinstall 3.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-10-09 22:56+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../../CONTRIBUTE.rst:3
msgid "Contribution guide"
msgstr ""
#: ../../CONTRIBUTE.rst:5
msgid "This is contribution guide for aqtinstall project. You are welcome to send a Pull-Request, reporting bugs and ask questions."
msgstr ""
#: ../../CONTRIBUTE.rst:9
msgid "Resources"
msgstr ""
#: ../../CONTRIBUTE.rst:11
msgid "Project owner: Hiroshi Miura"
msgstr ""
#: ../../CONTRIBUTE.rst:12
msgid "Bug Tracker: Github issue `Tracker`_"
msgstr ""
#: ../../CONTRIBUTE.rst:13
msgid "Status: Beta"
msgstr ""
#: ../../CONTRIBUTE.rst:14
msgid "Activity: moderate"
msgstr ""
#: ../../CONTRIBUTE.rst:19
msgid "Bug triage"
msgstr ""
#: ../../CONTRIBUTE.rst:21
msgid "Every report to github issue tracker should be in triage. whether it is bug, question or invalid."
msgstr ""
#: ../../CONTRIBUTE.rst:26
msgid "Send patch"
msgstr ""
#: ../../CONTRIBUTE.rst:28
msgid "Here is small amount rule when you want to send patch the project;"
msgstr ""
#: ../../CONTRIBUTE.rst:30
msgid "every proposal for modification should send as 'Pull Request'"
msgstr ""
#: ../../CONTRIBUTE.rst:32
msgid "each pull request can consist of multiple commits."
msgstr ""
#: ../../CONTRIBUTE.rst:34
msgid "you are encourage to split modifications to individual commits that are logical subpart."
msgstr ""
#: ../../CONTRIBUTE.rst:37
msgid "CI tests"
msgstr ""
#: ../../CONTRIBUTE.rst:39
msgid "The project configured to use Azure Pipelines, Github actions and Coveralls for regression test. You can see test results on badge and see details in a web page linked from badge."
msgstr ""

View File

@@ -0,0 +1,65 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2019-2021, Hiroshi Miura
# This file is distributed under the same license as the aqtinstall package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: aqtinstall 3.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-10-09 22:56+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../../SECURITY.rst:2
msgid "Security Policy"
msgstr ""
#: ../../SECURITY.rst:5
msgid "Supported Versions"
msgstr ""
#: ../../SECURITY.rst:8
msgid "Version"
msgstr ""
#: ../../SECURITY.rst:8
msgid "Status"
msgstr ""
#: ../../SECURITY.rst:10
msgid "3.0.x"
msgstr ""
#: ../../SECURITY.rst:10
msgid "Stable version"
msgstr ""
#: ../../SECURITY.rst:12
msgid "2.2.x"
msgstr ""
#: ../../SECURITY.rst:12
msgid "Security fixes only"
msgstr ""
#: ../../SECURITY.rst:14
msgid "< 2.2"
msgstr ""
#: ../../SECURITY.rst:14
msgid "not supported"
msgstr ""
#: ../../SECURITY.rst:18
msgid "Reporting a Vulnerability"
msgstr ""
#: ../../SECURITY.rst:20
msgid "Please disclose security vulnerabilities privately at miurahr@linux.com"
msgstr ""

145
docs/locale/pot/authors.pot Normal file
View File

@@ -0,0 +1,145 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2019-2021, Hiroshi Miura
# This file is distributed under the same license as the aqtinstall package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: aqtinstall 3.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-10-09 22:56+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../../authors.rst:6
msgid "Authors"
msgstr ""
#: ../../authors.rst:8
msgid "Aqtinstall is written and maintained by Hiroshi Miura <miurahr@linux.com>"
msgstr ""
#: ../../authors.rst:10
msgid "Original qli-installer is written by Linus Jahn"
msgstr ""
#: ../../authors.rst:12
msgid "Significant contributions for improvements of version 2.0 and 2.1 by David Dalcino David also leads many developments and reviews effort after 2.0."
msgstr ""
#: ../../authors.rst:15
msgid "All contributors, listed alphabetically, are:"
msgstr ""
#: ../../authors.rst:17
msgid "Andrei Yankovich (tools ifw installation)"
msgstr ""
#: ../../authors.rst:18
msgid "Aurélien Gâteau (patching to qmake)"
msgstr ""
#: ../../authors.rst:19
msgid "Benjamin O (Github Actions and more)"
msgstr ""
#: ../../authors.rst:20
msgid "Christian Hoffmann (Update mirror list)"
msgstr ""
#: ../../authors.rst:21
msgid "David Dalcino (Many improvements on CI automations, commands, tests, documents and so on)"
msgstr ""
#: ../../authors.rst:22
msgid "Doronin Stanislav (document)"
msgstr ""
#: ../../authors.rst:23
msgid "Fabrice Le Bars (32bit binary)"
msgstr ""
#: ../../authors.rst:24
msgid "Felix Barz (Android, Explicit extra module installation)"
msgstr ""
#: ../../authors.rst:25
msgid "Gamso (improve parsing of update.xml)"
msgstr ""
#: ../../authors.rst:26
msgid "Julien Marrec (mypy, type hints)"
msgstr ""
#: ../../authors.rst:27
msgid "Kyle Altendorf (7z binary path search)"
msgstr ""
#: ../../authors.rst:28
msgid "lightmare (Documents)"
msgstr ""
#: ../../authors.rst:29
msgid "Mike Tzou (Update fallback url)"
msgstr ""
#: ../../authors.rst:30
msgid "Martin Delille (Documents)"
msgstr ""
#: ../../authors.rst:31
msgid "mite-user (folder index handling of download web sites)"
msgstr ""
#: ../../authors.rst:32
msgid "Mizux Seihax (Qt versions)"
msgstr ""
#: ../../authors.rst:33
msgid "Mozi (CI/workflow improvement, log format)"
msgstr ""
#: ../../authors.rst:34
msgid "Nelson Chen (CI tests)"
msgstr ""
#: ../../authors.rst:35
msgid "@nikitalita (Binary distribution)"
msgstr ""
#: ../../authors.rst:36
msgid "@pylipp (Documents)"
msgstr ""
#: ../../authors.rst:37
msgid "Sztergbaum Roman (Version database)"
msgstr ""
#: ../../authors.rst:38
msgid "Thomas Grainger (CLI entry point)"
msgstr ""
#: ../../authors.rst:39
msgid "@tsteven4 (fix patching to qmake, pkgconfig and libtool)"
msgstr ""
#: ../../authors.rst:40
msgid "Vadim Peretokin (Version database)"
msgstr ""
#: ../../authors.rst:41
msgid "Vladyslav Hnatiuk (Version database)"
msgstr ""
#: ../../authors.rst:42
msgid "@ypnos (Documents)"
msgstr ""
#: ../../authors.rst:44
msgid "and many other participants and contributors. If you find a missing name to record, please feel free to tell me."
msgstr ""

1748
docs/locale/pot/changes.pot Normal file

File diff suppressed because it is too large Load Diff

599
docs/locale/pot/cli.pot Normal file
View File

@@ -0,0 +1,599 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2019-2021, Hiroshi Miura
# This file is distributed under the same license as the aqtinstall package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: aqtinstall 3.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-10-09 22:56+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../../cli.rst:4
msgid "Command Line Options"
msgstr ""
#: ../../cli.rst:6
msgid "The CLI uses argparse to parse the command line options so the short or long versions may be used and the long options may be truncated to the shortest unambiguous abbreviation."
msgstr ""
#: ../../cli.rst:10
msgid "Generic commands"
msgstr ""
#: ../../cli.rst:18
msgid "show generic help"
msgstr ""
#: ../../cli.rst:26
msgid "display version"
msgstr ""
#: ../../cli.rst:30
msgid "List-* Commands"
msgstr ""
#: ../../cli.rst:32
msgid "These commands are used to list the packages available for installation with ``aqt``."
msgstr ""
#: ../../cli.rst:37
msgid "list-qt command"
msgstr ""
#: ../../cli.rst:55
msgid "List available versions of Qt, targets, extensions, modules, and architectures."
msgstr ""
#: ../../cli.rst:59
#: ../../cli.rst:197
#: ../../cli.rst:237
#: ../../cli.rst:282
#: ../../cli.rst:320
#: ../../cli.rst:605
#: ../../cli.rst:665
#: ../../cli.rst:719
#: ../../cli.rst:771
msgid "linux, windows or mac"
msgstr ""
#: ../../cli.rst:63
#: ../../cli.rst:324
msgid "desktop, winrt, ios or android. When omitted, the command prints all the targets available for a host OS. Note that winrt is only available on Windows, and ios is only available on Mac OS."
msgstr ""
#: ../../cli.rst:69
#: ../../cli.rst:338
#: ../../cli.rst:376
msgid "Display help text"
msgstr ""
#: ../../cli.rst:73
msgid "Extension of packages to list {wasm,src_doc_examples,preview,wasm_preview,x86_64,x86,armv7,arm64_v8a}"
msgstr ""
#: ../../cli.rst:76
msgid "Use the ``--extensions`` flag to list all relevant options for a host/target. Incompatible with the ``--extensions`` flag, but may be combined with any other flag."
msgstr ""
#: ../../cli.rst:81
msgid "Qt version in the format of \"5.X.Y\", or the keyword ``latest``. When set, this prints all valid arguments for the ``--extension`` flag for Qt 5.X.Y, or the latest version of Qt if ``latest`` is specified. Incompatible with the ``--extension`` flag."
msgstr ""
#: ../../cli.rst:88
msgid "Print versions of Qt within a `SimpleSpec`_ that specifies a range of versions. You can specify partial versions, inequalities, etc. ``\"*\"`` would match all versions of Qt; ``\">6.0.2,<6.2.0\"`` would match all versions of Qt between 6.0.2 and 6.2.0, etc. For example, ``aqt list-qt windows desktop --spec \"5.12\"`` would print all versions of Qt for Windows Desktop beginning with 5.12. May be combined with any other flag to filter the output of that flag."
msgstr ""
#: ../../cli.rst:101
msgid "This flag lists all the modules available for Qt 5.X.Y with a host/target/extension/architecture combination, or the latest version of Qt if ``latest`` is specified. You can list available architectures by using ``aqt list-qt`` with the ``--arch`` flag described below."
msgstr ""
#: ../../cli.rst:108
msgid "Long display for modules: Similar to ``--modules``, but shows extra metadata associated with each module. This metadata is displayed in a table that includes long display names for each module. If your terminal is wider than 95 characters, ``aqt list-qt`` will also display release dates and sizes for each module. An example of this output is displayed below."
msgstr ""
#: ../../cli.rst:151
msgid "Qt version in the format of \"5.X.Y\". When set, this prints all architectures available for Qt 5.X.Y with a host/target/extension, or the latest version of Qt if ``latest`` is specified."
msgstr ""
#: ../../cli.rst:158
msgid "This flag requires a list of at least two arguments: 'Qt version' and 'architecture'. The 'Qt version' argument can be in the format \"5.X.Y\" or the \"latest\" keyword. You can use the ``--arch`` flag to see a list of acceptable values for the 'architecture' argument. Any following arguments must be the names of modules available for the preceding version and architecture. You can use the ``--modules`` flag to see a list of acceptable values."
msgstr ""
#: ../../cli.rst:164
msgid "If you do not add a list of modules to this flag, this command will print a list of all the archives that make up the base Qt installation."
msgstr ""
#: ../../cli.rst:167
msgid "If you add a list of modules to this flag, this command will print a list of all the archives that make up the specified modules."
msgstr ""
#: ../../cli.rst:170
msgid "The purpose of this command is to show you what arguments you can pass to the :ref:`archives flag <install archives flag>` when using the ``install-*`` commands. This flag allows you to avoid installing parts of Qt that you do not need."
msgstr ""
#: ../../cli.rst:176
msgid "Print only the newest version available May be combined with the ``--extension`` and/or ``--spec`` flags."
msgstr ""
#: ../../cli.rst:183
msgid "list-src command"
msgstr ""
#: ../../cli.rst:193
msgid "List source archives available for installation using the `install-src command`_."
msgstr ""
#: ../../cli.rst:201
#: ../../cli.rst:241
#: ../../cli.rst:286
#: ../../cli.rst:532
#: ../../cli.rst:614
#: ../../cli.rst:674
#: ../../cli.rst:728
msgid "This is a Qt version such as 5.9.7, 5.12.1 etc. Use the :ref:`List-Qt Command` to list available versions."
msgstr ""
#: ../../cli.rst:206
#: ../../cli.rst:246
#: ../../cli.rst:291
#: ../../cli.rst:537
#: ../../cli.rst:619
#: ../../cli.rst:679
#: ../../cli.rst:733
msgid "This is a `SimpleSpec`_ that specifies a range of versions. If you type something in the ``<Qt version>`` positional argument that cannot be interpreted as a version, it will be interpreted as a `SimpleSpec`_, and ``aqt`` will select the highest available version within that `SimpleSpec`_."
msgstr ""
#: ../../cli.rst:211
msgid "For example, ``aqt list-src mac 5.12`` would print archives for the latest version of Qt 5.12 available (5.12.11 at the time of this writing)."
msgstr ""
#: ../../cli.rst:218
msgid "list-doc command"
msgstr ""
#: ../../cli.rst:229
msgid "List documentation archives and modules available for installation using the `install-doc command`_."
msgstr ""
#: ../../cli.rst:232
msgid "By default, ``list-doc`` will print a list of archives available for installation using the `install-doc command`_, with the ``--archives`` option."
msgstr ""
#: ../../cli.rst:251
msgid "For example, ``aqt list-doc mac 5.12`` would print archives for the latest version of Qt 5.12 available (5.12.11 at the time of this writing)."
msgstr ""
#: ../../cli.rst:256
msgid "This flag causes ``list-doc`` to print a list of modules available for installation using the `install-doc command`_, with the ``--modules`` option."
msgstr ""
#: ../../cli.rst:263
msgid "list-example command"
msgstr ""
#: ../../cli.rst:274
msgid "List example archives and modules available for installation using the `install-example command`_."
msgstr ""
#: ../../cli.rst:277
msgid "By default, ``list-example`` will print a list of archives available for installation using the `install-example command`_, with the ``--archives`` option."
msgstr ""
#: ../../cli.rst:296
msgid "For example, ``aqt list-example mac 5.12`` would print archives for the latest version of Qt 5.12 available (5.12.11 at the time of this writing)."
msgstr ""
#: ../../cli.rst:301
msgid "This flag causes ``list-example`` to print a list of modules available for installation using the `install-example command`_, with the ``--modules`` option."
msgstr ""
#: ../../cli.rst:308
msgid "list-tool command"
msgstr ""
#: ../../cli.rst:316
msgid "List available tools"
msgstr ""
#: ../../cli.rst:330
msgid "The name of a tool. Use ``aqt list-tool <host> <target>`` to see accepted values. When set, this prints all 'tool variant names' available."
msgstr ""
#: ../../cli.rst:333
msgid "The output of this command is meant to be used with the :ref:`aqt install-tool <Tools installation command>` below."
msgstr ""
#: ../../cli.rst:343
msgid "Long display: shows extra metadata associated with each tool variant. This metadata is displayed in a table, and includes versions and release dates for each tool. If your terminal is wider than 95 characters, ``aqt list-tool`` will also display the names and descriptions for each tool. An example of this output is displayed below."
msgstr ""
#: ../../cli.rst:360
msgid "Install-* Commands"
msgstr ""
#: ../../cli.rst:362
msgid "These commands are used to install Qt, tools, source, docs, and examples."
msgstr ""
#: ../../cli.rst:368
msgid "Common Options"
msgstr ""
#: ../../cli.rst:370
msgid "Most of these commands share the same command line options, and these options are described here:"
msgstr ""
#: ../../cli.rst:380
msgid "Specify output directory. By default, aqt installs to the current working directory."
msgstr ""
#: ../../cli.rst:385
msgid "Specify mirror site base url such as -b ``https://mirrors.dotsrc.org/qtproject`` where 'online' folder exist."
msgstr ""
#: ../../cli.rst:390
msgid "Specify the path to your own ``settings.ini`` file. See :ref:`the Configuration section<configuration-ref>`."
msgstr ""
#: ../../cli.rst:394
msgid "The connection timeout, in seconds, for the download site. (default: 5 sec)"
msgstr ""
#: ../../cli.rst:398
msgid "Specify external 7zip command path. By default, aqt uses py7zr_ for this task."
msgstr ""
#: ../../cli.rst:400
msgid "In the past, our users have had success using 7-zip_ on Windows, Linux and Mac. You can install 7-zip on Windows with Choco_. The Linux/Mac port of 7-zip is called ``p7zip``, and you can install it with brew_ on Mac, or on Linux with your package manager."
msgstr ""
#: ../../cli.rst:412
msgid "Use the internal extractor, py7zr_"
msgstr ""
#: ../../cli.rst:416
msgid "Keep downloaded archive when specified, otherwise remove after install. Use ``--archive-dest <path>`` to choose where aqt will place these files. If you do not specify a download destination, aqt will place these files in the current working directory."
msgstr ""
#: ../../cli.rst:423
msgid "Set the destination path for downloaded archives (temp directory by default). All downloaded archives will be automatically deleted unless you have specified the ``--keep`` option above, or ``aqt`` crashes."
msgstr ""
#: ../../cli.rst:427
msgid "Note that this option refers to the intermediate ``.7z`` archives that ``aqt`` downloads and then extracts to ``--outputdir``. Most users will not need to keep these files."
msgstr ""
#: ../../cli.rst:433
msgid "Specify extra modules to install as a list. Use the appropriate ``aqt list-*`` command to list available modules:"
msgstr ""
#: ../../cli.rst:437
#: ../../cli.rst:480
msgid "Install command"
msgstr ""
#: ../../cli.rst:437
#: ../../cli.rst:480
msgid "List command"
msgstr ""
#: ../../cli.rst:437
#: ../../cli.rst:480
msgid "Usage of list command"
msgstr ""
#: ../../cli.rst:439
#: ../../cli.rst:482
msgid "install-qt"
msgstr ""
#: ../../cli.rst:439
#: ../../cli.rst:482
msgid "`list-qt command`_"
msgstr ""
#: ../../cli.rst:439
msgid "``list-qt <host> <target> --modules <version> <arch>``"
msgstr ""
#: ../../cli.rst:441
#: ../../cli.rst:484
msgid "install-example"
msgstr ""
#: ../../cli.rst:441
#: ../../cli.rst:484
msgid "`list-example command`_"
msgstr ""
#: ../../cli.rst:441
msgid "``list-example <host> <version> --modules``"
msgstr ""
#: ../../cli.rst:443
#: ../../cli.rst:488
msgid "install-doc"
msgstr ""
#: ../../cli.rst:443
#: ../../cli.rst:488
msgid "`list-doc command`_"
msgstr ""
#: ../../cli.rst:443
msgid "``list-doc <host> <version> --modules``"
msgstr ""
#: ../../cli.rst:447
msgid "This option only applicable to ``install-qt``, ``install-example``, and ``install-doc``."
msgstr ""
#: ../../cli.rst:449
msgid "You can install multiple modules like this:"
msgstr ""
#: ../../cli.rst:457
msgid "If you wish to install every module available, you may use the ``all`` keyword instead of a list of modules, like this:"
msgstr ""
#: ../../cli.rst:468
msgid "[Advanced] Specify subset of archives to **limit** installed archives. It will only affect the base Qt installation and the ``debug_info`` module. This is advanced option and not recommended to use for general usage. Main purpose is speed up CI/CD process by limiting installed modules. It can cause broken installation of Qt SDK."
msgstr ""
#: ../../cli.rst:474
msgid "This option is applicable to all the ``install-*`` commands except for ``install-tool``."
msgstr ""
#: ../../cli.rst:476
msgid "You can print a list of all acceptable values to use with this command by using the appropriate ``aqt list-*`` command:"
msgstr ""
#: ../../cli.rst:482
msgid "``list-qt <host> <target> --archives <version>``"
msgstr ""
#: ../../cli.rst:484
msgid "``list-example <host> <version>``"
msgstr ""
#: ../../cli.rst:486
msgid "install-src"
msgstr ""
#: ../../cli.rst:486
msgid "`list-src command`_"
msgstr ""
#: ../../cli.rst:486
msgid "``list-src <host> <version>``"
msgstr ""
#: ../../cli.rst:488
msgid "``list-doc <host> <version>``"
msgstr ""
#: ../../cli.rst:495
msgid "install-qt command"
msgstr ""
#: ../../cli.rst:517
msgid "Install Qt library, with specified version and target. There are various combinations to accept according to Qt version."
msgstr ""
#: ../../cli.rst:522
msgid "linux, windows or mac. The operating system on which the Qt development tools will run."
msgstr ""
#: ../../cli.rst:526
msgid "desktop, ios, winrt, or android. The type of device for which you are developing Qt programs. If your target is ios, please be aware that versions of Qt older than 6.2.4 are expected to be non-functional with current versions of XCode (applies to any XCode greater than or equal to 13)."
msgstr ""
#: ../../cli.rst:542
msgid "For example, ``aqt install-qt mac desktop 5.12`` would install the newest version of Qt 5.12 available, and ``aqt install-qt mac desktop \"*\"`` would install the highest version of Qt available."
msgstr ""
#: ../../cli.rst:546
msgid "When using this option, ``aqt`` will print the version that it has installed in the logs so that you can verify it easily."
msgstr ""
#: ../../cli.rst:551
msgid "The compiler architecture for which you are developing. Options:"
msgstr ""
#: ../../cli.rst:553
msgid "gcc_64 for linux desktop"
msgstr ""
#: ../../cli.rst:555
msgid "clang_64 for mac desktop"
msgstr ""
#: ../../cli.rst:557
msgid "win64_msvc2019_64, win64_msvc2017_64, win64_msvc2015_64, win32_msvc2015, win32_mingw53 for windows desktop"
msgstr ""
#: ../../cli.rst:559
msgid "android_armv7, android_arm64_v8a, android_x86, android_x86_64 for android"
msgstr ""
#: ../../cli.rst:561
msgid "Use the :ref:`List-Qt Command` to list available architectures."
msgstr ""
#: ../../cli.rst:565
msgid "If you are installing an ios or android version of Qt, the corresponding desktop version of Qt must be installed alongside of it. Turn this option on to install it automatically."
msgstr ""
#: ../../cli.rst:570
msgid "[Advanced] Specify not to install all base packages. This is advanced option and you should use it with ``--modules`` option. This allow you to add modules to existent Qt installation."
msgstr ""
#: ../../cli.rst:574
#: ../../cli.rst:635
#: ../../cli.rst:688
#: ../../cli.rst:743
#: ../../cli.rst:790
msgid "See `common options`_."
msgstr ""
#: ../../cli.rst:580
msgid "install-src command"
msgstr ""
#: ../../cli.rst:600
msgid "Install Qt source code for the specified version and target."
msgstr ""
#: ../../cli.rst:609
#: ../../cli.rst:669
#: ../../cli.rst:723
msgid "Deprecated and marked for removal in a future version of aqt. This parameter exists for backwards compatibility reasons, and its value is ignored."
msgstr ""
#: ../../cli.rst:624
msgid "For example, ``aqt install-src mac 5.12`` would install sources for the newest version of Qt 5.12 available, and ``aqt install-src mac \"*\"`` would install sources for the highest version of Qt available."
msgstr ""
#: ../../cli.rst:630
msgid "by adding ``--kde`` option, KDE patch collection is applied for qtbase tree. It is only applied to Qt 5.15.2. When specified version is other than it, command will abort with error when using ``--kde``."
msgstr ""
#: ../../cli.rst:641
msgid "install-doc command"
msgstr ""
#: ../../cli.rst:661
msgid "Install Qt documentation for the specified version and target."
msgstr ""
#: ../../cli.rst:684
msgid "For example, ``aqt install-doc mac 5.12`` would install documentation for the newest version of Qt 5.12 available, and ``aqt install-doc mac \"*\"`` would install documentation for the highest version of Qt available."
msgstr ""
#: ../../cli.rst:694
msgid "install-example command"
msgstr ""
#: ../../cli.rst:714
msgid "Install Qt examples for the specified version and target."
msgstr ""
#: ../../cli.rst:738
msgid "For example, ``aqt install-example mac 5.12`` would install examples for the newest version of Qt 5.12 available, and ``aqt install-example mac \"*\"`` would install examples for the highest version of Qt available."
msgstr ""
#: ../../cli.rst:749
msgid "install-tool command"
msgstr ""
#: ../../cli.rst:767
msgid "Install tools like QtIFW, mingw, Cmake, Conan, and vcredist."
msgstr ""
#: ../../cli.rst:775
msgid "desktop, ios or android"
msgstr ""
#: ../../cli.rst:779
msgid "install tools specified. tool name may be 'tools_openssl_x64', 'tools_vcredist', 'tools_ninja', 'tools_ifw', 'tools_cmake'"
msgstr ""
#: ../../cli.rst:784
msgid "Optional field to specify tool variant. It may be required for vcredist and mingw installation. tool variant names may be 'qt.tools.win64_mingw810', 'qt.tools.vcredist_msvc2013_x64'."
msgstr ""
#: ../../cli.rst:787
msgid "You should use the :ref:`List-Tool command` to display what tools and tool variant names are available."
msgstr ""
#: ../../cli.rst:794
msgid "Legacy subcommands"
msgstr ""
#: ../../cli.rst:796
msgid "The subcommands ``install``, ``tool``, ``src``, ``doc``, and ``examples`` have been deprecated in favor of the newer ``install-*`` commands, but they remain in aqt in case you still need to use them. Documentation for these older commands is still available at https://aqtinstall.readthedocs.io/en/v1.2.4/"
msgstr ""
#: ../../cli.rst:803
msgid "Command examples"
msgstr ""
#: ../../cli.rst:807
msgid "Example: Installing Qt SDK 5.12.12 for Linux with QtCharts and QtNetworkAuth:"
msgstr ""
#: ../../cli.rst:815
msgid "Example: Installing the newest LTS version of Qt 5.12:"
msgstr ""
#: ../../cli.rst:823
msgid "Example: Installing Android (armv7) Qt 5.13.2:"
msgstr ""
#: ../../cli.rst:830
msgid "Example: Install examples, doc and source:"
msgstr ""
#: ../../cli.rst:838
msgid "Example: Print archives available for installation with ``install-example/doc/src``:"
msgstr ""
#: ../../cli.rst:846
msgid "Example: Print modules available for installation with ``install-example/doc``:"
msgstr ""
#: ../../cli.rst:853
msgid "Example: Install Web Assembly"
msgstr ""
#: ../../cli.rst:860
msgid "Example: List available versions of Qt on Linux"
msgstr ""
#: ../../cli.rst:867
msgid "Example: List available versions of Qt6 on macOS"
msgstr ""
#: ../../cli.rst:874
msgid "Example: List available modules for latest version of Qt on macOS"
msgstr ""
#: ../../cli.rst:881
msgid "Example: List available architectures for Qt 6.1.2 on windows"
msgstr ""
#: ../../cli.rst:888
msgid "Example: List available tools on windows"
msgstr ""
#: ../../cli.rst:895
msgid "Example: List the variants of IFW available:"
msgstr ""
#: ../../cli.rst:904
msgid "Example: List the variants of IFW, including version, release date, description, etc.:"
msgstr ""
#: ../../cli.rst:911
msgid "Example: Install an Install FrameWork (IFW):"
msgstr ""
#: ../../cli.rst:918
msgid "Example: Install vcredist on Windows:"
msgstr ""
#: ../../cli.rst:927
msgid "Example: Install MinGW on Windows"
msgstr ""
#: ../../cli.rst:935
msgid "Example: Show help message"
msgstr ""

View File

@@ -0,0 +1,189 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2019-2021, Hiroshi Miura
# This file is distributed under the same license as the aqtinstall package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: aqtinstall 3.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-10-09 22:56+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../../configuration.rst:4
msgid "Configuration"
msgstr ""
#: ../../configuration.rst:6
msgid "``aqtinstall`` can be configured through a configuration file. A default configuration is stored in ``aqt/settings.ini`` file."
msgstr ""
#: ../../configuration.rst:9
msgid "You can specify custom configuration file through ``AQT_CONFIG`` environment variable or \"-c\" or \"--config\" command line option."
msgstr ""
#: ../../configuration.rst:12
msgid "A file is like as follows:"
msgstr ""
#: ../../configuration.rst:54
msgid "Settings"
msgstr ""
#: ../../configuration.rst:56
msgid "The ``[aqt]`` section configures basic behavior."
msgstr ""
#: ../../configuration.rst:60
msgid "concurrency:"
msgstr ""
#: ../../configuration.rst:59
msgid "``concurrency`` is a setting how many download concurrently starts. It should be a integer value."
msgstr ""
#: ../../configuration.rst:65
msgid "baseurl:"
msgstr ""
#: ../../configuration.rst:63
msgid "``baseurl`` is a URL of Qt download site. When you have your own Qt download site repository, you can set it here. It is as same as ``--base`` option."
msgstr ""
#: ../../configuration.rst:71
msgid "7zcmd:"
msgstr ""
#: ../../configuration.rst:68
msgid "It is a command name of 7-zip. When ``aqtinstall`` is installed **without** recommended library ``py7zr``, it is used to extract archive instead of ``py7zr`` library. When ``--external`` option specified, a value is override with option's one."
msgstr ""
#: ../../configuration.rst:78
msgid "print_stacktrace_on_error:"
msgstr ""
#: ../../configuration.rst:74
msgid "``print_stacktrace_on_error`` is either ``True`` or ``False``. The ``True`` setting causes a stack trace to be printed to stderr any time an error occurs that will end the program. The ``False`` setting will hide the stack trace, unless an unhandled exception occurs."
msgstr ""
#: ../../configuration.rst:85
msgid "always_keep_archives:"
msgstr ""
#: ../../configuration.rst:81
msgid "This is either ``True`` or ``False``. The ``True`` setting turns on the ``--keep`` option every time you run aqt, and cannot be overridden by command line options. The ``False`` setting will require you to set ``--keep`` manually every time you run aqt, unless you don't want to keep ``.7z`` archives."
msgstr ""
#: ../../configuration.rst:90
msgid "archive_download_location:"
msgstr ""
#: ../../configuration.rst:88
msgid "This is the relative or absolute path to the location in which ``.7z`` archives will be downloaded, when ``--keep`` is turned on. You can override this location with the ``--archives-dest`` option."
msgstr ""
#: ../../configuration.rst:104
msgid "min_module_size:"
msgstr ""
#: ../../configuration.rst:93
msgid "This is the minimum decompressed size, in bytes, of the modules that aqt is permitted to list. The authors of aqt have discovered that the Qt repository contains a few mysteriously \"empty\" modules, including the examples modules for `qtlottie` and `qtquicktimeline`. These modules consist of a single archive that contains empty directories, and they are exactly 40 bytes when uncompressed. The authors feel that it is not useful for ``aqt list-*`` to list these empty modules. If you want to print these modules with ``aqt list-*``, please feel free to change the `min_module_size` value to something less than 40."
msgstr ""
#: ../../configuration.rst:102
msgid "This setting has no effect on your ability to install these modules. ``aqt install-*`` can will still install them without any warnings."
msgstr ""
#: ../../configuration.rst:106
msgid "The ``[requests]`` section controls the way that ``aqt`` makes network requests."
msgstr ""
#: ../../configuration.rst:110
msgid "connection_timeout:"
msgstr ""
#: ../../configuration.rst:109
msgid "``connection_timeout`` is a timeout in second for connection. It is passed to ``requests`` library."
msgstr ""
#: ../../configuration.rst:114
msgid "response_timeout:"
msgstr ""
#: ../../configuration.rst:113
msgid "``response_timeout`` is a timeout in second how much time waiting for response. It is passed to ``requests`` library."
msgstr ""
#: ../../configuration.rst:117
msgid "max_retries:"
msgstr ""
#: ../../configuration.rst:117
msgid "Deprecated; please do not use this setting. It has been replaced by the"
msgstr ""
#: ../../configuration.rst:121
msgid "max_retries_on_connection_error:"
msgstr ""
#: ../../configuration.rst:120
msgid "``max_retries_on_connection_error`` is an integer that controls how many times ``aqt`` will try to reconnect to the server in the case of a connection error."
msgstr ""
#: ../../configuration.rst:127
msgid "retry_backoff:"
msgstr ""
#: ../../configuration.rst:124
msgid "``retry_backoff`` is a floating point number that controls how long ``aqt`` will sleep between failed connection attempts. Setting this value too low will hammer the server, and may result in no successful connections at all."
msgstr ""
#: ../../configuration.rst:132
msgid "max_retries_on_checksum_error:"
msgstr ""
#: ../../configuration.rst:130
msgid "This setting controls how many times ``aqt`` will attempt to download a file, in the case of a checksum error."
msgstr ""
#: ../../configuration.rst:134
msgid "The ``[mirrors]`` section is a configuration for mirror handling."
msgstr ""
#: ../../configuration.rst:152
msgid "trusted_mirrors:"
msgstr ""
#: ../../configuration.rst:137
msgid "``trusted_mirrors`` is a list of URLs that you trust to provide accurate checksums for all downloaded archives. This is a security feature; please do not change this value unless you know what you're doing!"
msgstr ""
#: ../../configuration.rst:142
msgid "``aqtinstall`` downloads all checksums from mirrors in this list. These checksums are used to verify that every other file that ``aqtinstall`` downloads is, in fact, the correct file, and not a corrupt or malicious copy of the file. You may need to modify this list if the default mirrors are unreachable, or if you do not trust that they have not been compromised."
msgstr ""
#: ../../configuration.rst:149
msgid "``aqtinstall`` can safely download archive files from the fallback mirror list, and ensure that they are not malicious files, by checking them against the checksums downloaded from the ``trusted_mirrors`` list. ``aqtinstall`` uses the SHA-256 algorithm to perform this check."
msgstr ""
#: ../../configuration.rst:160
msgid "blacklist:"
msgstr ""
#: ../../configuration.rst:155
msgid "It is a list of URL where is a problematic mirror site. Some mirror sites ignore a connection from IP addresses out of their preffered one. It will cause connection error or connection timeout. There are some known mirror sites in default. When you are happy with the default sites, you can override with your custom settings."
msgstr ""
#: ../../configuration.rst:164
msgid "fallbacks:"
msgstr ""
#: ../../configuration.rst:163
msgid "It is a list of URL where is a good for access. When mirror site cause an error, aqt use fallbacks when possible. You can find a list of mirrors at: https://download.qt.io/static/mirrorlist/"
msgstr ""

View File

@@ -0,0 +1,411 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2019-2021, Hiroshi Miura
# This file is distributed under the same license as the aqtinstall package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: aqtinstall 3.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-10-09 22:56+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../../getting_started.rst:4
msgid "Getting Started"
msgstr ""
#: ../../getting_started.rst:6
msgid "``aqt`` is a tool that can be used to install Qt, modules, tools related to Qt, source, docs, and examples, available at https://download.qt.io/. Before running ``aqt``, you will need to tell ``aqt`` exactly what you want it to install. This section of the documentation is meant to walk you through the process of finding out what packages are available to ``aqt``, so you can tell ``aqt`` what you want to install."
msgstr ""
#: ../../getting_started.rst:13
msgid "Please note that every ``aqt`` subcommand has a ``--help`` option; please use it if you are having trouble!"
msgstr ""
#: ../../getting_started.rst:18
msgid "Installing Qt"
msgstr ""
#: ../../getting_started.rst:20
msgid "General usage of ``aqt`` looks like this:"
msgstr ""
#: ../../getting_started.rst:26
msgid "If you have installed ``aqt`` with pip, you can run it with the command script ``aqt``, but in some cases you may need to run it as ``python -m aqt``. Some older operating systems may require you to specify Python version 3, like this: ``python3 -m aqt``."
msgstr ""
#: ../../getting_started.rst:30
msgid "To use ``aqt`` to install Qt, you will need to tell ``aqt`` four things:"
msgstr ""
#: ../../getting_started.rst:32
#: ../../getting_started.rst:410
msgid "The host operating system (windows, mac, or linux)"
msgstr ""
#: ../../getting_started.rst:33
#: ../../getting_started.rst:411
msgid "The target SDK (desktop, android, ios, or winrt)"
msgstr ""
#: ../../getting_started.rst:34
msgid "The version of Qt you would like to install"
msgstr ""
#: ../../getting_started.rst:35
msgid "The target architecture"
msgstr ""
#: ../../getting_started.rst:37
msgid "Keep in mind that Qt for IOS is only available on Mac OS, and Qt for WinRT is only available on Windows."
msgstr ""
#: ../../getting_started.rst:40
msgid "To find out what versions of Qt are available, you can use the :ref:`aqt list-qt command <list-qt command>`. This command will print all versions of Qt available for Windows Desktop:"
msgstr ""
#: ../../getting_started.rst:57
msgid "Notice that the version numbers are sorted, grouped by minor version number, and separated by a single space-character. The output of all of the :ref:`aqt list-qt <list-qt command>` commands is intended to make it easier for you to write programs that consume the output of :ref:`aqt list-qt <list-qt command>`."
msgstr ""
#: ../../getting_started.rst:62
msgid "Because the :ref:`aqt list-qt <list-qt command>` command directly queries the Qt downloads repository at https://download.qt.io/, the results of this command will always be accurate. The `Available Qt versions`_ wiki page was last modified at some point in the past, so it may or may not be up to date."
msgstr ""
#: ../../getting_started.rst:69
msgid "Now that we know what versions of Qt are available, let's choose version 6.2.0."
msgstr ""
#: ../../getting_started.rst:71
msgid "The next thing we need to do is find out what architectures are available for Qt 6.2.0 for Windows Desktop. To do this, we can use :ref:`aqt list-qt <list-qt command>` with the ``--arch`` flag:"
msgstr ""
#: ../../getting_started.rst:80
msgid "Notice that this is a very small subset of the architectures listed in the `Available Qt versions`_ wiki page. If we need to use some architecture that is not on this list, we can use the `Available Qt versions`_ wiki page to get a rough idea of what versions support the architecture we want, and then use :ref:`aqt list-qt <list-qt command>` to confirm that the architecture is available."
msgstr ""
#: ../../getting_started.rst:86
msgid "Let's say that we want to install Qt 6.2.0 with architecture `win64_mingw81`. The installation command we need is:"
msgstr ""
#: ../../getting_started.rst:93
msgid "Let's say that we want to install the next version of Qt 6.2 as soon as it is available. We can do this by using a `SimpleSpec <https://python-semanticversion.readthedocs.io/en/latest/reference.html#semantic_version.SimpleSpec>`_ instead of an explicit version:"
msgstr ""
#: ../../getting_started.rst:104
msgid "External 7-zip extractor"
msgstr ""
#: ../../getting_started.rst:106
msgid "By default, ``aqt`` extracts the 7zip archives stored in the Qt repository using py7zr_, which is installed alongside ``aqt``. You can specify an alternate 7zip command path instead by using the ``-E`` or ``--external`` flag. For example, you could use 7-zip_ on a Windows desktop, using this command:"
msgstr ""
#: ../../getting_started.rst:115
msgid "On Linux, you can specify p7zip_, a Linux port of 7-zip_, which is often installed by default, using this command:"
msgstr ""
#: ../../getting_started.rst:127
msgid "Changing the output directory"
msgstr ""
#: ../../getting_started.rst:129
msgid "By default, ``aqt`` will install all of the Qt packages into the current working directory, in the subdirectory ``./<Qt version>/<arch>/``. For example, if we install Qt 6.2.0 for Windows desktop with arch `win64_mingw81`, it would end up in ``./6.2.0/win64_mingw81``."
msgstr ""
#: ../../getting_started.rst:134
msgid "If you would prefer to install it to another location, you will need to use the ``-O`` or ``--outputdir`` flag. This option also works for all of the other subcommands that begin with ``aqt install-``."
msgstr ""
#: ../../getting_started.rst:139
msgid "To install to ``C:\\Qt``, the default directory used by the standard gui installer, you may use this command:"
msgstr ""
#: ../../getting_started.rst:149
msgid "Installing Modules"
msgstr ""
#: ../../getting_started.rst:151
msgid "Let's say we need to install some modules for Qt 5.15.2 on Windows Desktop. First we need to find out what the modules are called, and we can do that with :ref:`aqt list-qt <list-qt command>` with the ``--modules`` flag. Each version of Qt has a different list of modules for each host OS/ target SDK/ architecture combination, so we will need to supply :ref:`aqt list-qt <list-qt command>` with that information:"
msgstr ""
#: ../../getting_started.rst:163
msgid "Let's say that we want to know more about these modules before we install them. We can use the ``--long-modules`` flag for that:"
msgstr ""
#: ../../getting_started.rst:183
msgid "Note that if your terminal is wider than 95 characters, this command will show release dates and sizes in extra columns to the right. If you try this, you will notice that `debug_info` is 5.9 gigabytes installed."
msgstr ""
#: ../../getting_started.rst:187
msgid "Let's say that we want to install `qtcharts` and `qtnetworkauth`. We can do that by using the `-m` flag with the :ref:`aqt install-qt <qt installation command>` command. This flag receives the name of at least one module as an argument:"
msgstr ""
#: ../../getting_started.rst:195
msgid "If we wish to install all the modules that are available, we can do that with the ``all`` keyword:"
msgstr ""
#: ../../getting_started.rst:201
msgid "Remember that the :ref:`aqt list-qt <list-qt command>` command is meant to be scriptable? One way to install all modules available for Qt 5.15.2 is to send the output of :ref:`aqt list-qt <list-qt command>` into :ref:`aqt install-qt <qt installation command>`, like this:"
msgstr ""
#: ../../getting_started.rst:210
msgid "You will need a Unix-style shell to run this command, or at least git-bash on Windows. The ``xargs`` equivalent to this command is an exercise left to the reader."
msgstr ""
#: ../../getting_started.rst:213
msgid "If you want to install all available modules, you are probably better off using the ``all`` keyword, as discussed above. This scripting example is presented to give you a sense of how to accomplish something more complicated. Perhaps you want to install all modules except `qtnetworkauth`; you could write a script that removes `qtnetworkauth` from the output of :ref:`aqt list-qt <list-qt command>`, and pipe that into :ref:`aqt install-qt <qt installation command>`. This exercise is left to the reader."
msgstr ""
#: ../../getting_started.rst:223
msgid "Installing Qt for Android"
msgstr ""
#: ../../getting_started.rst:225
msgid "Let's install Qt for Android. Installing Qt 5 will be similar to installing Qt for Desktop on Windows, but there will be differences when we get to Qt 6."
msgstr ""
#: ../../getting_started.rst:243
msgid "Let's see what happens when we try to list architectures and modules for Qt 6:"
msgstr ""
#: ../../getting_started.rst:257
msgid "The Qt 6 for Android repositories are a little different than the Qt 5 repositories, and the :ref:`aqt list-qt <list-qt command>` tool doesn't know where to look for modules and architectures if you don't tell it what architecture you need. I know, it sounds a little backwards, but that's how the Qt repo was put together."
msgstr ""
#: ../../getting_started.rst:262
msgid "There are four architectures available, and the error message from :ref:`aqt list-qt <list-qt command>` just told us what they are: `x86_64`, `x86`, `armv7`, and `arm64_v8a`."
msgstr ""
#: ../../getting_started.rst:265
msgid "We know we want to use `armv7` for the architecture, but we don't know exactly what value for 'architecture' we need to pass to :ref:`aqt install-qt <qt installation command>` yet, so we will use :ref:`aqt list-qt <list-qt command>` again:"
msgstr ""
#: ../../getting_started.rst:274
msgid "You should be thinking, \"Well, that was silly. All it did was add `android_` to the beginning of the architecture I gave it. Why do I need to use ``aqt list-qt --arch`` for that?\" The answer is, ``aqt list-qt --arch`` is checking to see what actually exists in the Qt repository. If it prints an error message, instead of the obvious `android_armv7`, we would know that Qt 6.2.0 for that architecture doesn't exist for some reason, and any attempt to install it with :ref:`aqt install-qt <qt installation command>` will fail."
msgstr ""
#: ../../getting_started.rst:282
msgid "If we want to install Qt 6.2.0 for armv7, we use this command to print available modules:"
msgstr ""
#: ../../getting_started.rst:292
msgid "Finally, let's install Qt 6.2.0 for Android armv7 with the ``qtcharts`` and ``qtnetworkauth`` modules:"
msgstr ""
#: ../../getting_started.rst:299
msgid "Please note that when you install Qt for android or ios, the installation will not be functional unless you install the corresponding desktop version of Qt alongside it. You can do this automatically with the ``--autodesktop`` flag:"
msgstr ""
#: ../../getting_started.rst:308
msgid "Installing Qt for WASM"
msgstr ""
#: ../../getting_started.rst:310
msgid "To find out how to install Qt for WASM, we need to tell :ref:`aqt list-qt <list-qt command>` that we are using the `wasm` architecture. We can do that by using the ``--extension wasm`` flag."
msgstr ""
#: ../../getting_started.rst:320
msgid "There are only a few versions of Qt that support WASM, and they are only available for desktop targets. If we tried this command with `android`, `winrt`, or `ios` targets, we would have seen an error message."
msgstr ""
#: ../../getting_started.rst:324
msgid "We can check the architecture and modules available as before:"
msgstr ""
#: ../../getting_started.rst:335
msgid "We can install Qt for WASM as before:"
msgstr ""
#: ../../getting_started.rst:343
msgid "Installing Tools"
msgstr ""
#: ../../getting_started.rst:345
msgid "Let's find out what tools are available for Windows Desktop by using the :ref:`aqt list-tool <list-tool command>` command:"
msgstr ""
#: ../../getting_started.rst:364
msgid "Let's see what tool variants are available in `tools_mingw`:"
msgstr ""
#: ../../getting_started.rst:380
msgid "This gives us a list of things that we could install using :ref:`aqt install-tool <tools installation command>`. Let's see some more details, using the ``-l`` or ``--long`` flag:"
msgstr ""
#: ../../getting_started.rst:401
msgid "The ``-l`` flag causes :ref:`aqt list-tool <list-tool command>` to print a table that shows plenty of data pertinent to each tool variant available in `tools_mingw`. :ref:`aqt list-tool <list-tool command>` additionally prints the 'Display Name' and 'Description' for each tool if your terminal is wider than 95 characters; terminals that are narrower than this cannot display this table in a readable way."
msgstr ""
#: ../../getting_started.rst:407
msgid "Now let's install `mingw`, using the :ref:`aqt install-tool <tools installation command>` command. This command receives four parameters:"
msgstr ""
#: ../../getting_started.rst:412
msgid "The name of the tool (this is `tools_mingw` in our case)"
msgstr ""
#: ../../getting_started.rst:413
msgid "(Optional) The tool variant name. We saw a list of these when we ran :ref:`aqt list-tool <list-tool command>` with the `tool name` argument filled in."
msgstr ""
#: ../../getting_started.rst:416
msgid "To install `mingw`, you could use this command (please don't):"
msgstr ""
#: ../../getting_started.rst:422
msgid "Using this command will install every tool variant available in `tools_mingw`; in this case, you would install 10 different versions of the same tool. For some tools, like `qtcreator` or `ifw`, this is an appropriate thing to do, since each tool variant is a different program. However, for tools like `mingw` and `vcredist`, it would make more sense to use :ref:`aqt list-tool <list-tool command>` to see what tool variants are available, and then install just the tool variant you are interested in, like this:"
msgstr ""
#: ../../getting_started.rst:435
msgid "Please note that ``aqt install-tool`` does not recognize the ``installscript.qs`` related to each tool. When you install these tools with the standard gui installer, the installer may use the ``installscript.qs`` script to make additional changes to your system. If you need those changes to occur, it will be your responsibility to make those changes happen, because ``aqt`` is not capable of running this script."
msgstr ""
#: ../../getting_started.rst:443
msgid "Installing a subset of Qt archives [Advanced]"
msgstr ""
#: ../../getting_started.rst:446
msgid "Introduction"
msgstr ""
#: ../../getting_started.rst:448
msgid "You may have noticed that by default, ``aqt install-qt`` installs a lot of archives that you may or may not need, and a typical installation can take up more disk space than necessary. If you installed the module ``debug_info``, it may have installed more than 1 gigabyte of data. This section will help you to reduce the footprint of your Qt installation."
msgstr ""
#: ../../getting_started.rst:456
msgid "Be careful about using the ``--archives`` flag; it is marked `Advanced` for a reason! It is very easy to misuse this command and end up with a Qt installation that is missing the components that you need. Don't use it unless you know what you are doing!"
msgstr ""
#: ../../getting_started.rst:463
msgid "Minimum Qt Installation"
msgstr ""
#: ../../getting_started.rst:465
msgid "Normally, when you run ``aqt install-qt``, the program will print a long list of archives that it is downloading, extracting, and installing, including ``qtbase``, ``qtmultimedia``, ``qt3d``, and ~25 more items. We can use the ``--archives`` flag to choose which of these archives we will actually install. The ``--archives`` flag can only affect two modules: the base Qt installation and the ``debug_info`` module."
msgstr ""
#: ../../getting_started.rst:473
msgid "In this documentation, **\"modules\"**, **\"archives\"**, and **\"the base Qt installation\"** refer to different things, and are defined here:"
msgstr ""
#: ../../getting_started.rst:476
msgid "**Archives**: In this context, an **archive** is a bundle of files compressed with the 7zip algorithm. It exists on a disk drive as a file with the extension ``.7z``."
msgstr ""
#: ../../getting_started.rst:480
msgid "**Modules**: The Qt repository organizes groups of archives into modules. A **module** contains one or more **archives**."
msgstr ""
#: ../../getting_started.rst:483
msgid "**the base Qt installation**: By definition, this is just another **module** that contains 20-30 **archives**. This documentation refers to it as **the base Qt installation** instead of a **module** for several reasons:"
msgstr ""
#: ../../getting_started.rst:488
msgid "The ``aqt install-qt`` installs this module by default."
msgstr ""
#: ../../getting_started.rst:489
msgid "You cannot specify this module with ``aqt install-qt --modules``."
msgstr ""
#: ../../getting_started.rst:490
msgid "The ``aqt list-qt --modules`` command is incapable of printing this module."
msgstr ""
#: ../../getting_started.rst:491
msgid "``aqt`` transforms the names of modules as they exist in the Qt repository so that they are easier to read and write. If the name of **the base Qt installation** were transformed using the same rules, the name would be empty."
msgstr ""
#: ../../getting_started.rst:496
msgid "The fully-qualified name of the **base Qt installation** module is usually something like ``qt.qt6.620.gcc_64``. The fully-qualified name of the ``qtcharts`` module could be something like ``qt.qt6.620.qtcharts.gcc_64``. It would be difficult to read and write a list of 20 modules with the prefix ``qt.qt6.620.`` and the suffix ``.gcc_64``, because these parts are repetitive and not meaningful. Only the ``qtcharts`` part is useful."
msgstr ""
#: ../../getting_started.rst:504
msgid "Let's say that we want to install Qt 5.15.2 for Linux desktop, using the gcc_64 architecture. The ``qtbase`` archive includes the bare minimum for a working Qt installation, and we can install it alone with the ``--archives`` flag:"
msgstr ""
#: ../../getting_started.rst:512
msgid "This time, ``aqt install-qt`` will only install one archive, ``qtbase``, instead of the ~27 archives it installs by default."
msgstr ""
#: ../../getting_started.rst:516
msgid "Installing More Than The Bare Minimum"
msgstr ""
#: ../../getting_started.rst:518
msgid "Let's say that the ``qtbase`` archive is missing some features that you need. Using the ``--archives qtbase`` flag causes ``aqt install-qt`` to omit roughly 27 archives. We can print a list of these archives with the ``aqt list-qt --archives`` command:"
msgstr ""
#: ../../getting_started.rst:530
msgid "Here, we have used the ``--archives`` flag with two arguments: the version of Qt we are interested in, and the architecture we are using. As a result, the command printed a list of archives that are part of the base (non-minimal) Qt installation."
msgstr ""
#: ../../getting_started.rst:535
msgid "Let's say we need to use ``qtmultimedia``, ``qtdeclarative``, ``qtsvg``, and nothing else. Remember that the ``qtbase`` archive is required for a minimal working Qt installation. We can install these archives using this command:"
msgstr ""
#: ../../getting_started.rst:544
msgid "Installing Modules With Archives Specified"
msgstr ""
#: ../../getting_started.rst:546
msgid "As of aqt v2.1.0, the ``--archives`` flag will only apply to the base Qt installation and to the ``debug_info`` module. Previous versions of aqt required that when installing modules with the ``--archives`` flag, the user must specify archives for each module, otherwise they would not be installed. This behavior has been changed to prevent such mistakes."
msgstr ""
#: ../../getting_started.rst:552
msgid "Let's say that we need to install the bare minimum Qt 5.15.2, with the modules ``qtcharts`` and ``qtlottie``:"
msgstr ""
#: ../../getting_started.rst:558
msgid "This command will successfully install 3 archives: 1 for ``qtbase``, and one each for the two modules. If we had tried to use this command with previous versions of aqt, we would not have installed the two modules because we did not specify them in the ``--archives`` list."
msgstr ""
#: ../../getting_started.rst:564
msgid "You can still misuse the ``--archives`` flag by omitting the ``qtbase`` archive, or by omitting archives that another archive or module is dependent on. You may not notice that there is a problem until you try to compile a program, and compilation fails."
msgstr ""
#: ../../getting_started.rst:570
msgid "Installing the ``debug_info`` module"
msgstr ""
#: ../../getting_started.rst:572
msgid "Now let's say we need to install the ``debug_info`` module, which is particularly large: around one gigabyte. We do not want to install all of it, so we can use ``aqt install-qt --archives`` to choose which archives we want to install. Remember that the ``--archives`` flag"
msgstr ""
#: ../../getting_started.rst:577
msgid "``aqt list-qt --archives`` to print which archives are part of the ``debug_info`` module:"
msgstr ""
#: ../../getting_started.rst:589
msgid "This is a lot of archives. Note that there's a name collision between the ``debug_info`` archives and the archives in every other module/Qt base install: this is because there's a ``debug_info`` archive that corresponds to almost every other archive available."
msgstr ""
#: ../../getting_started.rst:595
msgid "Let's install Qt with ``qtcharts`` and ``debug_info`` with some archives specified:"
msgstr ""
#: ../../getting_started.rst:602
msgid "Notice what we did here: We specified the ``qtcharts`` and ``debug_info`` modules, and we specified the ``qtbase``, ``qtcharts``, and ``qtdeclarative`` archives. This will install a total of 6 archives:"
msgstr ""
#: ../../getting_started.rst:606
msgid "the 3 archives named ``qtbase``, ``qtcharts``, and ``qtdeclarative`` from the ``debug_info`` module,"
msgstr ""
#: ../../getting_started.rst:607
msgid "the 1 archive ``qtcharts`` from the ``qtcharts`` module, and"
msgstr ""
#: ../../getting_started.rst:608
msgid "the 2 archives ``qtbase`` and ``qtdeclarative`` from the base Qt installation."
msgstr ""
#: ../../getting_started.rst:611
msgid "At present, ``aqt install-qt`` is incapable of installing any archive from the ``debug_info`` module without also installing the corresponding module from the base Qt installation. For instance, you cannot install the ``debug_info`` archive for ``qtbase`` without also installing the usual ``qtbase`` archive."
msgstr ""

41
docs/locale/pot/index.pot Normal file
View File

@@ -0,0 +1,41 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2019-2021, Hiroshi Miura
# This file is distributed under the same license as the aqtinstall package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: aqtinstall 3.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-10-09 22:56+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../../index.rst:2
msgid "aqtinstall manual"
msgstr ""
#: ../../index.rst:4
msgid "Contents:"
msgstr ""
#: ../../index.rst:20
msgid "Indices and tables"
msgstr ""
#: ../../index.rst:22
msgid ":ref:`genindex`"
msgstr ""
#: ../../index.rst:23
msgid ":ref:`modindex`"
msgstr ""
#: ../../index.rst:24
msgid ":ref:`search`"
msgstr ""

View File

@@ -0,0 +1,144 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2019-2021, Hiroshi Miura
# This file is distributed under the same license as the aqtinstall package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: aqtinstall 3.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-10-09 22:56+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../../installation.rst:6
msgid "Installation"
msgstr ""
#: ../../installation.rst:9
msgid "Requirements"
msgstr ""
#: ../../installation.rst:11
msgid "Minimum Python version: 3.6"
msgstr ""
#: ../../installation.rst:12
msgid "Recommended Python version: 3.7.5 or later"
msgstr ""
#: ../../installation.rst:14
msgid "Dependent libraries: requests, py7zr, semantic_version, patch, texttable, bs4"
msgstr ""
#: ../../installation.rst:18
msgid "Install by pip command"
msgstr ""
#: ../../installation.rst:20
msgid "Same as usual, it can be installed with `pip`"
msgstr ""
#: ../../installation.rst:29
msgid "Command changes"
msgstr ""
#: ../../installation.rst:31
msgid "From version 2.0.0, sub commands are changed. The previous versions of these sub commands have been retained for backwards compatibility, but are no longer recommended."
msgstr ""
#: ../../installation.rst:36
msgid "New sub commands"
msgstr ""
#: ../../installation.rst:36
msgid "Legacy sub commands"
msgstr ""
#: ../../installation.rst:36
msgid "Note"
msgstr ""
#: ../../installation.rst:38
msgid "install-qt"
msgstr ""
#: ../../installation.rst:38
msgid "install"
msgstr ""
#: ../../installation.rst:38
#: ../../installation.rst:45
#: ../../installation.rst:49
#: ../../installation.rst:54
msgid "Version moved after target"
msgstr ""
#: ../../installation.rst:40
msgid "install-tool"
msgstr ""
#: ../../installation.rst:40
msgid "tool"
msgstr ""
#: ../../installation.rst:40
msgid "Arguments are changed"
msgstr ""
#: ../../installation.rst:42
msgid "New syntax doesn't take version"
msgstr ""
#: ../../installation.rst:45
msgid "install-example"
msgstr ""
#: ../../installation.rst:45
msgid "examples"
msgstr ""
#: ../../installation.rst:47
msgid "Caution with last (s)"
msgstr ""
#: ../../installation.rst:49
msgid "install-src"
msgstr ""
#: ../../installation.rst:49
msgid "src"
msgstr ""
#: ../../installation.rst:51
msgid "New command only can take --kde option"
msgstr ""
#: ../../installation.rst:54
msgid "install-doc"
msgstr ""
#: ../../installation.rst:54
msgid "doc"
msgstr ""
#: ../../installation.rst:56
msgid "list"
msgstr ""
#: ../../installation.rst:56
msgid "Legacy list commands are removed."
msgstr ""
#: ../../installation.rst:59
msgid "list-qt"
msgstr ""
#: ../../installation.rst:61
msgid "list-tool"
msgstr ""

View File

@@ -2,9 +2,174 @@
.. default-role:: any
.. _changes:
.. _previous_changes:
.. include:: ../CHANGELOG.rst
====================
Changes until v2.0.6
====================
`v2.0.6`_ (7, Feb. 2022)
========================
Fixed
-----
* Fix archives flag(#459)
* Accept the case Update.xml in Server has delimiter without space(#479)
* Fix getUrl function to use property http session and retry(#473)
Added
-----
* 32bit release binary(#471)
Changed
-------
* Update combinations.xml
* Qt 6.2.2, 6.2.3, 6.3.0(#481,#484)
`v2.0.5`_ (11, Dec. 2021)
=========================
Changed
-------
* Reduce memory consumption: garbage collection on install subprocess(#464)
* Cache PowerShell modules on Azure Pipeline(#465)
`v2.0.4`_ (5, Dec. 2021)
=========================
Fixed
=====
* Allow duplicated install on the directory previously installed(#438,#462)
* Memory error on 32bit python on Windows(#436,#462)
Changed
=======
* Change list-src, list-doc and list-example command(#453)
`v2.0.3`_ (25, Nov. 2021)
=========================
Added
-----
* Improve --keep and new --archive-dest options(#458)
Fixed
-----
* Fix cross-platform installation failure (#450)
* CI: update OSes, Windows-2019, macOS-10.15(#444,#456)
* CI: fix failure of uploading coveralls(#446)
* CI: test for QtIFW(#451)
Changed
-------
* combinations matrix json(#452)
`v2.0.2`_ (1, Nov. 2021)
=========================
Added
-----
* Support Qt 6.2.1 (#441)
Fixed
-----
* Degraded install-tool (#442,#443)
Changed
-------
* Add suggestion to use ``--external`` for MemoryError (#439)
`v2.0.1`_ (29, Oct. 2021)
=========================
Added
-----
* Allow retries on checksum error(#420)
* Run on Python 3.10(#424)
* Add more mirrors for fallback(#432)
* Add fallback URL message(#434)
Fixed
-----
* ``--noarchives`` inconsistency(#429)
* Allow multiprocessing error propagation(#419)
* Legacy command behavior, reproduce also old bugs (#414)
* Fix crash on ``crash install-qt <host> <tgt> <spec>`` with no specified arch(#435)
Changed
-------
* Print working directory and version in error message(#418)
Security
--------
* Use HTTPS for mirror site(#430)
`v2.0.0`_ (29, Sep. 2021)
=========================
Added
-----
* Add error messages when user inputs an invalid semantic version(#291)
* Security Policy document(#341)
* CodeQL static code analysis(#341)
* CI: generate combination json in actions (#318,#343)
* Test: add and improve unit tests(#327,#359)
* Docs: getting started section(#351)
* Docs: recommend python3 for old systems(#349)
* Automatically update combinations.json (#343,#344,#345,#386,#390,#395)
* CI: test with Qt6.2 with modules(#346)
* README: link documentation for stable(#329)
* Support WASM on Qt 6.2.0(#384)
* Add Binary distribution for Windows(#393,#397)
* Add list-qt --archives feature(#400)
* Require architecture when listing modules(#401)
Changed
-------
* list subcommand now support tool information(#235)
* list subcommand can show versions, architectures and modules.(#235)
* C: bundle jom.zip in source(#295)
* Add max_retries configuration for connection(#296)
* Change settings.ini to introduce [requests] section(#297)
* Change log format for logging file.
* Extension validation for tool subcommand(#314)
* list subcommand has --tool-long option(#304, #319)
* tool subcommand now install without version spec(#299)
* README example command is now easy to copy-and-paste(#322)
* list subcommand update(#331)
* Improve handle of Ctrl-C keyboard interruption(#337)
* Update combinations.json(#344,#386)
* Turn warnings into errors when building docs(#360)
* Update documentations(#358,#357)
* Test: consolidate lint configuration to pyproject.toml(#356)
* Test: black configuration to max_line_length=125 (#356)
* New subcommand syntax (#354,#355)
* Failed on missing modules(#374)
* Failed on missing tools(#375)
* Remove 'addons' prefix for some modules for Qt6+ (#368)
* Fix inappropriate warnings(#370)
* Update README to fix version 2 (#377)
* list-qt: Specify version by SimpleSpec(#392)
* Add helpful error messages when modules/tools/Qt version does not exist(#402)
Fixed
-----
* Fix helper.getUrl() to handle several response statuses(#292)
* Fix Qt 6.2.0 target path for macOS.(#289)
* Fix WinRT installation patching(#311)
* Fix Qt 5.9.0 installation (#312)
* Link documentations for stable/latest on README
* Check python version when starting command (#352)
* README: remove '$' from example command line(#321)
* README: fix command line example lexer(#322)
* CI: fix release script launch conditions(#298)
* Handle special case for Qt 5.9.0(#364)
* Running python2 -m aqt does not trigger Python version check (#372,#373)
* docs(cli): correct the parameter of "list-tool" in an example(#399)
* Doc: Fix broken mirror link in cli.rst (#403)
* CI: fix release action fails with no files found(#405)
`v1.2.5`_ (14, Aug. 2021)
@@ -455,7 +620,7 @@ Changed
Fixed
-----
* Work around for http://download.qt.io/ returns wrong metalink xml data.(#105, #106)
* Work around for https://download.qt.io/ returns wrong metalink xml data.(#105, #106)
`v0.8a1`_ (28, Feb., 2020)
@@ -864,6 +1029,13 @@ Fixed
.. _7zip: https://www.7-zip.org/
.. _requests: https://pypi.org/project/requests
.. _argparse: https://pypi.org/project/argparse/
.. _v2.0.6: https://github.com/miurahr/aqtinstall/compare/v2.0.5...v2.0.6
.. _v2.0.5: https://github.com/miurahr/aqtinstall/compare/v2.0.4...v2.0.5
.. _v2.0.4: https://github.com/miurahr/aqtinstall/compare/v2.0.3...v2.0.4
.. _v2.0.3: https://github.com/miurahr/aqtinstall/compare/v2.0.2...v2.0.3
.. _v2.0.2: https://github.com/miurahr/aqtinstall/compare/v2.0.1...v2.0.2
.. _v2.0.1: https://github.com/miurahr/aqtinstall/compare/v2.0.0...v2.0.1
.. _v2.0.0: https://github.com/miurahr/aqtinstall/compare/v1.2.5...v2.0.0
.. _v1.2.5: https://github.com/miurahr/aqtinstall/compare/v1.2.4...v1.2.5
.. _v1.2.4: https://github.com/miurahr/aqtinstall/compare/v1.2.3...v1.2.4
.. _v1.2.3: https://github.com/miurahr/aqtinstall/compare/v1.2.2...v1.2.3

View File

@@ -1,7 +1,6 @@
[project]
name = "aqtinstall"
description = "Another unofficial Qt installer"
readme = "README.rst"
license = {text = "MIT License"}
authors = [
{name = "Hiroshi Miura", email = "miurahr@linux.com"},
@@ -21,19 +20,27 @@ classifiers = [
"Topic :: Software Development",
"Topic :: Software Development :: Libraries",
]
requires-python = ">=3.6"
requires-python = ">=3.7"
dependencies = [
"bs4",
"dataclasses;python_version<'3.7'",
"bs4", # canonical name is beautifulsoup4
"defusedxml",
"humanize",
"patch>=1.16",
"py7zr>=0.18.3",
"requests",
"semantic_version",
"py7zr>=0.20.6",
"requests>=2.31.0",
"semantic-version",
"texttable",
]
dynamic = ["version", "entry-points"]
dynamic = ["version", "readme"]
[tool.setuptools]
packages = ["aqt"]
[tool.setuptools.dynamic]
readme = {file = ["README.rst"]}
[tool.setuptools.package-data]
aqt = ["*.yml", "*.json", "*.ini"]
[project.scripts]
aqt = "aqt.__main__:main"
@@ -42,18 +49,18 @@ aqt = "aqt.__main__:main"
test = [
"pytest>=6.0",
"pytest-pep8",
"pytest-remotedata",
"pytest-cov",
"pytest-remotedata>=0.4.1",
"pytest-socket",
"pytest-leaks",
"pytest-timeout",
"pympler",
]
check = [
"flake8<5",
"mypy>=0.990",
"flake8>=6.0.0,<7.0.0",
"flake8-black",
"flake8-colors",
"flake8-isort",
"flake8-isort>=6.0.0,<7.0.0",
"flake8-pyi",
"flake8-typing-imports",
"docutils",
@@ -63,9 +70,12 @@ check = [
"packaging",
]
docs = [
"sphinx>=5.0",
"sphinx_rtd_theme",
"sphinx-py3doc-enhanced-theme",
"sphinx>=7.0",
"sphinx_rtd_theme>=1.3",
"sphinx-py3doc-enhanced-theme>=2.4",
]
debug = [
"pytest-leaks",
]
[project.urls]
@@ -73,10 +83,7 @@ Documentation = "https://aqtinstall.readthedocs.io/"
"Bug Tracker" = "https://github.com/miurahr/aqtinstall/issues"
Wiki = "https://github.com/miurahr/aqtinstall/wiki"
Source = "https://github.com/miurahr/aqtinstall"
Changelog = "https://github.com/miurahr/aqtinstall/blob/master/CHANGELOG.rst"
[tool.poetry]
include = ["*.yml", "*.json", "*.ini"]
Changelog = "https://aqtinstall.readthedocs.io/en/latest/CHANGELOG.html"
[build-system]
requires = ["setuptools>=61", "wheel", "setuptools_scm[toml]>=6.4"]
@@ -104,7 +111,7 @@ exclude_lines = ["if __name__ == .__main__.:", "pragma: no-cover", "@abstract",
[tool.black]
line-length = 125
target-version = ['py38']
target-version = ['py39']
[tool.isort]
line_length = 125
@@ -117,10 +124,40 @@ use_parentheses = true
ensure_newline_before_comments = true
[tool.mypy]
warn_redundant_casts = true
warn_unused_ignores = true
# Untyped definitions and calls are disable in default
check_untyped_defs = false
disallow_incomplete_defs = false
disallow_untyped_calls = false
disallow_untyped_defs = false
disallow_untyped_decorators = false
# not a all 3rd party package has type hints
ignore_missing_imports = true
# Optional check: implicit check enabled in mypy 0.980 or before
strict_optional = true
implicit_optional = false
# Enable incremental mode and use sqlite cache
incremental = true
sqlite_cache = true
# Enables PEP 420 style namespace packages
namespace_packages = true
# Control error output
pretty = true
color_output = true
show_error_context = false
show_column_numbers = true
error_summary = true
# configuring warnings
warn_no_return = true
warn_redundant_casts = true
warn_return_any = true
warn_unreachable = true
warn_unused_ignores = true
# TODO: Remove this `ignore_missing_imports` and add type stubs.
# See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
[[tool.mypy.overrides]]
module = "texttable"
ignore_missing_imports = true
[tool.pytest.ini_options]
minversion = "6.0"
@@ -137,14 +174,14 @@ markers = [
[tool.tox]
legacy_tox_ini = """
[tox]
envlist = check, docs, py{36,37,38,39,310}, py39d, mprof, fil
envlist = check, docs, py{37,38,39,310,311}, py39d, mprof, fil, mypy
isolated_build = True
[testenv]
passenv =
GITHUB_*
APPVEYOR APPVEYOR_*
TRAVIS TRAVIS_*
GITHUB*
APPVEYOR*
TRAVIS*
COVERALLS_*
PYTEST_ADDOPTS
extras = test, check, docs
@@ -152,14 +189,23 @@ commands =
python -m pytest -vv
[testenv:check]
basepython = python3.8
basepython = python3.9
extras = check
commands =
check-manifest {toxinidir}
flake8 aqt tests
[testenv:mypy]
basepython = python3.9
extras = check
commands = mypy aqt
deps =
types-requests
types-beautifulsoup4
types-psutil
[testenv:docs]
basepython = python3.8
basepython = python3.9
extras = docs
commands =
sphinx-build {posargs:-E} -W -b html docs build/docs
@@ -167,18 +213,13 @@ commands =
[testenv:py39d]
basepython = python3.9d
extras = test
extras = test, debug
commands =
python3.9-dbg -m pytest -v --no-cov -R : -k "test_install"
deps =
pytest
pytest-leaks
pytest-remotedata
pytest-socket
pytest-cov
[testenv:mprof]
basepython = python3.8
basepython = python3.9
extras = debug
commands =
mprof run --multiprocess python -m aqt install-qt -O /tmp -d /tmp linux desktop 6.2.1
mprof plot --output memory-profile.png
@@ -187,7 +228,8 @@ deps =
matplotlib
[testenv:fil]
basepython = python3.8
basepython = python3.9
extras = debug
commands =
fil-profile run -m aqt install-qt -O /tmp -d /tmp linux desktop 6.2.1
deps =
@@ -202,8 +244,8 @@ commands =
[gh-actions]
python =
3.6: py36
3.8: py38, docs, check
3.9: py39
3.8: py38
3.9: py39, docs, check, mypy
3.10: py310
3.11: py311
"""

View File

@@ -1,79 +0,0 @@
[metadata]
name = aqtinstall
description = Another unofficial Qt installer
long_description = file: README.rst
long_description_content_type = text/x-rst
license = MIT
author = Hiroshi Miura
author_email = miurahr@linux.com
url = http://github.com/miurahr/aqtinstall
project_urls =
Documentation = https://aqtinstall.readthedocs.io/
Bug Tracker = https://github.com/miurahr/aqtinstall/issues
Wiki = https://github.com/miurahr/aqtinstall/wiki
Source = https://github.com/miurahr/aqtinstall
Changelog = https://github.com/miurahr/aqtinstall/blob/master/CHANGELOG.rst
classifiers =
Development Status :: 4 - Beta
Environment :: Console
Environment :: X11 Applications :: Qt
Intended Audience :: Developers
License :: OSI Approved :: MIT License
Operating System :: MacOS :: MacOS X
Operating System :: Microsoft :: Windows
Operating System :: POSIX
Operating System :: POSIX :: Linux
Programming Language :: Python
Programming Language :: C++
Topic :: Software Development
Topic :: Software Development :: Libraries
[options]
python_requires = >= 3.6
install_requires =
bs4
dataclasses;python_version<'3.7'
defusedxml
humanize
patch>=1.16
py7zr>=0.18.3
requests
semantic_version
texttable
setup_requires =
setuptools-scm[toml]>=6.4
setuptools>=61
packages = aqt
[options.entry_points]
console_scripts =
aqt = aqt.__main__:main
[options.package_data]
aqt = *.yml, *.json, *.ini
[options.extras_require]
test =
pytest
pytest-pep8
pytest-remotedata
pytest-cov
pytest-socket
pytest-leaks
pympler
check =
flake8
flake8-black
flake8-colors
flake8-isort
flake8-pyi
flake8-typing-imports
docutils
check-manifest
readme-renderer
pygments
packaging
docs =
sphinx>=2.3
sphinx_rtd_theme
sphinx-py3doc-enhanced-theme

View File

@@ -1,2 +0,0 @@
import setuptools
setuptools.setup()

View File

@@ -9,7 +9,9 @@
"5.14.0 5.14.1 5.14.2",
"5.15.0 5.15.1 5.15.2",
"6.0.0 6.0.1 6.0.2 6.0.3",
"6.1.0"
"6.1.0",
"6.2.0",
"6.5.0"
],
"preview": [
"5.9-preview",
@@ -25,8 +27,11 @@
"wasm": [
"5.13.0 5.13.1 5.13.2",
"5.14.0 5.14.1 5.14.2",
"5.15.0 5.15.1 5.15.2"
"5.15.0 5.15.1 5.15.2",
"6.2.0"
],
"wasm_singlethread": ["6.5.0"],
"wasm_multithread": ["6.5.0"],
"wasm_preview": [
"5.13-preview",
"5.14-preview",
@@ -74,6 +79,7 @@
"tools_ifw",
"tools_generic",
"tools_conan",
"tools_cmake"
"tools_cmake",
"sdktool"
]
}

View File

@@ -38,6 +38,14 @@
<tr><td valign="top">&nbsp;</td><td><a href="tools_generic/">tools_generic/</a></td><td align="right">13-Apr-2021 14:39 </td><td align="right"> - </td><td>&nbsp;</td></tr>
<tr><td valign="top">&nbsp;</td><td><a href="tools_conan/">tools_conan/</a></td><td align="right">15-Feb-2021 12:14 </td><td align="right"> - </td><td>&nbsp;</td></tr>
<tr><td valign="top">&nbsp;</td><td><a href="tools_cmake/">tools_cmake/</a></td><td align="right">07-Jan-2021 14:22 </td><td align="right"> - </td><td>&nbsp;</td></tr>
<tr><td valign="top">&nbsp;</td><td><a href="sdktool/">sdktool/</a></td><td align="right">05-May-2023 10:53 </td><td align="right"> - </td><td>&nbsp;</td></tr>
<tr><td valign="top">&nbsp;</td><td><a href="qt6_650_wasm_singlethread/">qt6_650_wasm_singlethread/</a></td><td align="right">01-Jan-2023 00:00 </td><td align="right"> - </td><td>&nbsp;</td></tr>
<tr><td valign="top">&nbsp;</td><td><a href="qt6_650_wasm_multithread/">qt6_650_wasm_multithread/</a></td><td align="right">01-Jan-2023 00:00 </td><td align="right"> - </td><td>&nbsp;</td></tr>
<tr><td valign="top">&nbsp;</td><td><a href="qt6_650_src_doc_examples/">qt6_650_src_doc_examples/</a></td><td align="right">01-Jan-2023 00:00 </td><td align="right"> - </td><td>&nbsp;</td></tr>
<tr><td valign="top">&nbsp;</td><td><a href="qt6_650/">qt6_650/</a></td><td align="right">01-Jan-2023 00:00 </td><td align="right"> - </td><td>&nbsp;</td></tr>
<tr><td valign="top">&nbsp;</td><td><a href="qt6_620_wasm/">qt6_620_wasm/</a></td><td align="right">29-Sep-2021 12:46 </td><td align="right"> - </td><td>&nbsp;</td></tr>
<tr><td valign="top">&nbsp;</td><td><a href="qt6_620_src_doc_examples/">qt6_620_src_doc_examples/</a></td><td align="right">29-Sep-2021 12:43 </td><td align="right"> - </td><td>&nbsp;</td></tr>
<tr><td valign="top">&nbsp;</td><td><a href="qt6_620/">qt6_620/</a></td><td align="right">29-Sep-2021 12:34 </td><td align="right"> - </td><td>&nbsp;</td></tr>
<tr><td valign="top">&nbsp;</td><td><a href="qt6_610_src_doc_examples/">qt6_610_src_doc_examples/</a></td><td align="right">30-Apr-2021 08:09 </td><td align="right"> - </td><td>&nbsp;</td></tr>
<tr><td valign="top">&nbsp;</td><td><a href="qt6_610/">qt6_610/</a></td><td align="right">30-Apr-2021 08:07 </td><td align="right"> - </td><td>&nbsp;</td></tr>
<tr><td valign="top">&nbsp;</td><td><a href="qt6_603_src_doc_examples/">qt6_603_src_doc_examples/</a></td><td align="right">31-Mar-2021 07:31 </td><td align="right"> - </td><td>&nbsp;</td></tr>

View File

@@ -9,7 +9,9 @@
"5.14.0 5.14.1 5.14.2",
"5.15.0 5.15.1 5.15.2",
"6.0.0 6.0.1 6.0.2 6.0.3",
"6.1.0"
"6.1.0",
"6.2.0",
"6.5.0"
],
"preview": [
"5.6-preview",
@@ -26,8 +28,11 @@
"wasm": [
"5.13.1 5.13.2",
"5.14.0 5.14.1 5.14.2",
"5.15.0 5.15.1 5.15.2"
"5.15.0 5.15.1 5.15.2",
"6.2.0"
],
"wasm_singlethread": ["6.5.0"],
"wasm_multithread": ["6.5.0"],
"wasm_preview": [
"5.13-preview",
"5.14-preview",
@@ -75,6 +80,7 @@
"tools_ifw",
"tools_generic",
"tools_conan",
"tools_cmake"
"tools_cmake",
"sdktool"
]
}

View File

@@ -0,0 +1,14 @@
{
"modules": [
"qt.tools.qtcreator"
],
"long_listing": [
[
"qt.tools.qtcreator",
"10.0.1-0-202305050734",
"2023-05-05",
"SDKTool",
"SDKTool"
]
]
}

View File

@@ -0,0 +1,20 @@
<Updates>
<ApplicationName>{AnyApplication}</ApplicationName>
<ApplicationVersion>1.0.0</ApplicationVersion>
<Checksum>true</Checksum>
<PackageUpdate>
<Name>qt.tools.qtcreator</Name>
<DisplayName>SDKTool</DisplayName>
<Description>SDKTool</Description>
<Version>10.0.1-0-202305050734</Version>
<ReleaseDate>2023-05-05</ReleaseDate>
<Script>installscript.qs</Script>
<Virtual>true</Virtual>
<ForcedInstallation>true</ForcedInstallation>
<DownloadableArchives>qtcreator_sdktool.7z</DownloadableArchives>
<UpdateFile CompressedSize="1821889" UncompressedSize="6058248" OS="Any"/>
<SHA1>450d20347716f794124272a38d7cf46df9c50169</SHA1>
</PackageUpdate>
<SHA1>c6d6c9ff8b3c0a75f1bb1804eb4955a6409ac867</SHA1>
<MetadataName>2023-05-05-0734_meta.7z</MetadataName>
</Updates>

View File

@@ -38,6 +38,14 @@
<tr><td valign="top">&nbsp;</td><td><a href="tools_generic/">tools_generic/</a></td><td align="right">13-Apr-2021 14:39 </td><td align="right"> - </td><td>&nbsp;</td></tr>
<tr><td valign="top">&nbsp;</td><td><a href="tools_conan/">tools_conan/</a></td><td align="right">15-Feb-2021 12:15 </td><td align="right"> - </td><td>&nbsp;</td></tr>
<tr><td valign="top">&nbsp;</td><td><a href="tools_cmake/">tools_cmake/</a></td><td align="right">07-Jan-2021 14:22 </td><td align="right"> - </td><td>&nbsp;</td></tr>
<tr><td valign="top">&nbsp;</td><td><a href="sdktool/">sdktool/</a></td><td align="right">05-May-2023 10:53 </td><td align="right"> - </td><td>&nbsp;</td></tr>
<tr><td valign="top">&nbsp;</td><td><a href="qt6_650_wasm_singlethread/">qt6_650_wasm_singlethread/</a></td><td align="right">01-Jan-2023 00:00 </td><td align="right"> - </td><td>&nbsp;</td></tr>
<tr><td valign="top">&nbsp;</td><td><a href="qt6_650_wasm_multithread/">qt6_650_wasm_multithread/</a></td><td align="right">01-Jan-2023 00:00 </td><td align="right"> - </td><td>&nbsp;</td></tr>
<tr><td valign="top">&nbsp;</td><td><a href="qt6_650_src_doc_examples/">qt6_650_src_doc_examples/</a></td><td align="right">01-Jan-2023 00:00 </td><td align="right"> - </td><td>&nbsp;</td></tr>
<tr><td valign="top">&nbsp;</td><td><a href="qt6_650/">qt6_650/</a></td><td align="right">01-Jan-2023 00:00 </td><td align="right"> - </td><td>&nbsp;</td></tr>
<tr><td valign="top">&nbsp;</td><td><a href="qt6_620_wasm/">qt6_620_wasm/</a></td><td align="right">29-Sep-2021 12:46 </td><td align="right"> - </td><td>&nbsp;</td></tr>
<tr><td valign="top">&nbsp;</td><td><a href="qt6_620_src_doc_examples/">qt6_620_src_doc_examples/</a></td><td align="right">29-Sep-2021 12:43 </td><td align="right"> - </td><td>&nbsp;</td></tr>
<tr><td valign="top">&nbsp;</td><td><a href="qt6_620/">qt6_620/</a></td><td align="right">29-Sep-2021 12:34 </td><td align="right"> - </td><td>&nbsp;</td></tr>
<tr><td valign="top">&nbsp;</td><td><a href="qt6_610_src_doc_examples/">qt6_610_src_doc_examples/</a></td><td align="right">30-Apr-2021 08:13 </td><td align="right"> - </td><td>&nbsp;</td></tr>
<tr><td valign="top">&nbsp;</td><td><a href="qt6_610/">qt6_610/</a></td><td align="right">30-Apr-2021 08:13 </td><td align="right"> - </td><td>&nbsp;</td></tr>
<tr><td valign="top">&nbsp;</td><td><a href="qt6_603_src_doc_examples/">qt6_603_src_doc_examples/</a></td><td align="right">31-Mar-2021 07:34 </td><td align="right"> - </td><td>&nbsp;</td></tr>

View File

@@ -0,0 +1,18 @@
{
"architectures": [
"wasm_32"
],
"modules_by_arch": {
"wasm_32": [
"qtcharts",
"qtdatavis3d",
"qtlottie",
"qtnetworkauth",
"qtpurchasing",
"qtquicktimeline",
"qtscript",
"qtvirtualkeyboard",
"qtwebplugin"
]
}
}

View File

@@ -0,0 +1,291 @@
<Updates>
<ApplicationName>{AnyApplication}</ApplicationName>
<ApplicationVersion>1.0.0</ApplicationVersion>
<Checksum>true</Checksum>
<PackageUpdate>
<Name>qt.qt5.5140.qtcharts</Name>
<DisplayName>Qt Charts</DisplayName>
<Description>The Qt Charts API lets you easily create interactive and dynamic 2D charts using C++ and/or Qt Quick.&lt;br>&lt;br>This component is available under commercial licenses from The Qt Company, or under GPL v3. For open source use, please note the additional requirements compared to LGPL v3.</Description>
<Version>5.14.0-0-201912110813</Version>
<ReleaseDate>2019-12-11</ReleaseDate>
<Default>false</Default>
<SortingPriority>89</SortingPriority>
<Dependencies>qt.qt5.5140.doc.qtcharts, qt.qt5.5140.examples.qtcharts</Dependencies>
<AutoDependOn/>
<Script>installscript.qs</Script>
<DownloadableArchives/>
<UpdateFile CompressedSize="0" OS="Any" UncompressedSize="0"/>
<SHA1>6c5eeb7879b8d08041fc9d1b3ec2c4a83b956f75</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt5.5140.qtcharts.wasm_32</Name>
<DisplayName>Qt Charts for WebAssembly</DisplayName>
<Description/>
<Version>5.14.0-0-201912110813</Version>
<ReleaseDate>2019-12-11</ReleaseDate>
<AutoDependOn>qt.qt5.5140.qtcharts, qt.qt5.5140.wasm_32</AutoDependOn>
<Dependencies>qt.qt5.5140.wasm_32</Dependencies>
<Virtual>true</Virtual>
<Script>installscript.qs</Script>
<SortingPriority/>
<DownloadableArchives>qtcharts-Windows-Windows_10-Mingw73-Windows-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile CompressedSize="2491642" OS="Any" UncompressedSize="9011562"/>
<SHA1>826c45ce5c2ead4fb2b98fcaf037f41f30e603bc</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt5.5140.qtdatavis3d</Name>
<DisplayName>Qt Data Visualization</DisplayName>
<Description>Qt Data Visualization is a module which provides a way to visualize data in 3D. There are C++ classes and QML types for displaying bar graphs, scatter graphs, surface graphs and ways of manipulating the 3D scene. In addition, the graphs are fully customizable with different themes.&lt;br>&lt;br>This component is available under commercial licenses from The Qt Company, or under GPL v3. For open source use, please note the additional requirements compared to LGPL v3.</Description>
<Version>5.14.0-0-201912110813</Version>
<ReleaseDate>2019-12-11</ReleaseDate>
<Default>false</Default>
<SortingPriority>88</SortingPriority>
<Dependencies>qt.qt5.5140.doc.qtdatavis3d, qt.qt5.5140.examples.qtdatavis3d</Dependencies>
<AutoDependOn/>
<Script>installscript.qs</Script>
<DownloadableArchives/>
<UpdateFile CompressedSize="0" OS="Any" UncompressedSize="0"/>
<SHA1>00897be97807dba6650c13994b6d1288a7f3c7de</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt5.5140.qtdatavis3d.wasm_32</Name>
<DisplayName>Qt Data Visualization for WebAssembly</DisplayName>
<Description/>
<Version>5.14.0-0-201912110813</Version>
<ReleaseDate>2019-12-11</ReleaseDate>
<AutoDependOn>qt.qt5.5140.qtdatavis3d, qt.qt5.5140.wasm_32</AutoDependOn>
<Dependencies>qt.qt5.5140.wasm_32</Dependencies>
<Virtual>true</Virtual>
<Script>installscript.qs</Script>
<SortingPriority/>
<DownloadableArchives>qtdatavis3d-Windows-Windows_10-Mingw73-Windows-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile CompressedSize="2050196" OS="Any" UncompressedSize="7106514"/>
<SHA1>496e2fda0f3408271f6ebe6c880f163ead6be7fa</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt5.5140.qtlottie</Name>
<DisplayName>Qt Lottie Animation (Technology Preview)</DisplayName>
<Description>Qt Lottie Animation provides a QML API for rendering graphics and animations that are exported in JSON format by the Bodymovin plugin for Adobe After Effects.&lt;br>&lt;br>This component is available under commercial licenses from The Qt Company, or under GPL v3. For open source use, please note the additional requirements compared to LGPL v3.</Description>
<Version>5.14.0-0-201912110813</Version>
<ReleaseDate>2019-12-11</ReleaseDate>
<Default>false</Default>
<SortingPriority>88</SortingPriority>
<Dependencies>qt.qt5.5140.doc.qtlottie, qt.qt5.5140.examples.qtlottie</Dependencies>
<AutoDependOn/>
<Script>installscript.qs</Script>
<DownloadableArchives/>
<UpdateFile CompressedSize="0" OS="Any" UncompressedSize="0"/>
<SHA1>12e0a4e0427833e88ef6af4c2b416146764ced84</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt5.5140.qtlottie.wasm_32</Name>
<DisplayName>Qt Lottie Animation for WebAssembly</DisplayName>
<Description/>
<Version>5.14.0-0-201912110813</Version>
<ReleaseDate>2019-12-11</ReleaseDate>
<AutoDependOn>qt.qt5.5140.qtlottie, qt.qt5.5140.wasm_32</AutoDependOn>
<Dependencies>qt.qt5.5140.wasm_32</Dependencies>
<Virtual>true</Virtual>
<Script>installscript.qs</Script>
<SortingPriority/>
<DownloadableArchives>qtlottie-Windows-Windows_10-Mingw73-Windows-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile CompressedSize="596645" OS="Any" UncompressedSize="1757999"/>
<SHA1>3d3b8b1ed28bbbbafa20bd7c19b8d23bd5a12b5c</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt5.5140.qtnetworkauth</Name>
<DisplayName>Qt Network Authorization</DisplayName>
<Description>Qt Network Authorization is an add-on library that enables Qt applications to use different web authentication systems.</Description>
<Version>5.14.0-0-201912110813</Version>
<ReleaseDate>2019-12-11</ReleaseDate>
<Default>false</Default>
<SortingPriority>10</SortingPriority>
<Dependencies>qt.qt5.5140.doc.qtnetworkauth, qt.qt5.5140.examples.qtnetworkauth</Dependencies>
<AutoDependOn/>
<Script>installscript.qs</Script>
<DownloadableArchives/>
<UpdateFile CompressedSize="0" OS="Any" UncompressedSize="0"/>
<SHA1>7642c9f02e7bee9e300b56876bf205be22591a54</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt5.5140.qtnetworkauth.wasm_32</Name>
<DisplayName>Qt Network Authorization for WebAssembly</DisplayName>
<Description/>
<Version>5.14.0-0-201912110813</Version>
<ReleaseDate>2019-12-11</ReleaseDate>
<AutoDependOn>qt.qt5.5140.qtnetworkauth, qt.qt5.5140.wasm_32</AutoDependOn>
<Dependencies>qt.qt5.5140.wasm_32</Dependencies>
<Virtual>true</Virtual>
<Script>installscript.qs</Script>
<SortingPriority/>
<DownloadableArchives>qtnetworkauth-Windows-Windows_10-Mingw73-Windows-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile CompressedSize="158593" OS="Any" UncompressedSize="448180"/>
<SHA1>69f8e088ec3397f59d9c6f86beed710feadf70ce</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt5.5140.qtpurchasing</Name>
<DisplayName>Qt Purchasing</DisplayName>
<Description>Qt Purchasing. Cross-platform APIs for handling in-app purchases on Android, iOS and macOS.</Description>
<Version>5.14.0-0-201912110813</Version>
<ReleaseDate>2019-12-11</ReleaseDate>
<Default>false</Default>
<SortingPriority>87</SortingPriority>
<Dependencies>qt.qt5.5140.doc.qtpurchasing, qt.qt5.5140.examples.qtpurchasing</Dependencies>
<AutoDependOn/>
<Script>installscript.qs</Script>
<DownloadableArchives/>
<UpdateFile CompressedSize="0" OS="Any" UncompressedSize="0"/>
<SHA1>04aac5a70b3864f5ea89dc0aedcd9a6d6489cc90</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt5.5140.qtpurchasing.wasm_32</Name>
<DisplayName>Qt Purchasing for WebAssembly</DisplayName>
<Description/>
<Version>5.14.0-0-201912110813</Version>
<ReleaseDate>2019-12-11</ReleaseDate>
<AutoDependOn>qt.qt5.5140.qtpurchasing, qt.qt5.5140.wasm_32</AutoDependOn>
<Dependencies>qt.qt5.5140.wasm_32</Dependencies>
<Virtual>true</Virtual>
<Script>installscript.qs</Script>
<SortingPriority/>
<DownloadableArchives>qtpurchasing-Windows-Windows_10-Mingw73-Windows-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile CompressedSize="94847" OS="Any" UncompressedSize="331745"/>
<SHA1>594234def34d8b9e66152d024c194827314b7427</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt5.5140.qtquicktimeline</Name>
<DisplayName>Qt Quick Timeline </DisplayName>
<Description>The Qt Quick Timeline module enables keyframe-based animations and parameterization. It takes a tooling-friendly approach, and is therefore directly supported by Qt Design Studio and Qt Quick Designer that contain a timeline editor for creating keyframe based animations.&lt;br>&lt;br>This component is available under commercial licenses from The Qt Company, or under GPL v3. For open source use, please note the additional requirements compared to LGPL v3.</Description>
<Version>5.14.0-0-201912110813</Version>
<ReleaseDate>2019-12-11</ReleaseDate>
<Default>false</Default>
<SortingPriority>0</SortingPriority>
<Dependencies>qt.qt5.5140.doc.qtquicktimeline, qt.qt5.5140.examples.qtquicktimeline</Dependencies>
<AutoDependOn/>
<Script>installscript.qs</Script>
<DownloadableArchives/>
<UpdateFile CompressedSize="0" OS="Any" UncompressedSize="0"/>
<SHA1>0ed2a09e664371f045ffba1ea62230de6a5a09bd</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt5.5140.qtquicktimeline.wasm_32</Name>
<DisplayName>Qt Quick Timeline for WebAssembly</DisplayName>
<Description/>
<Version>5.14.0-0-201912110813</Version>
<ReleaseDate>2019-12-11</ReleaseDate>
<AutoDependOn>qt.qt5.5140.qtquicktimeline, qt.qt5.5140.wasm_32</AutoDependOn>
<Dependencies>qt.qt5.5140.wasm_32</Dependencies>
<Virtual>true</Virtual>
<Script>installscript.qs</Script>
<SortingPriority/>
<DownloadableArchives>qtquicktimeline-Windows-Windows_10-Mingw73-Windows-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile CompressedSize="91340" OS="Any" UncompressedSize="238917"/>
<SHA1>fa03bab96695ee6657d7c761af33bc68dbbf9fc5</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt5.5140.qtscript</Name>
<DisplayName>Qt Script (Deprecated)</DisplayName>
<Description>Qt Script (Deprecated) Prebuilt Components for Qt 5.14.0.&lt;br>&lt;br>This component contains Third-Party Content licensed under LGPLv2.0. Please note the additional requirements of the license.</Description>
<Version>5.14.0-0-201912110813</Version>
<ReleaseDate>2019-12-11</ReleaseDate>
<Default>false</Default>
<SortingPriority>9</SortingPriority>
<Dependencies>qt.qt5.5140.doc.qtscript, qt.qt5.5140.examples.qtscript</Dependencies>
<AutoDependOn/>
<Script>installscript.qs</Script>
<DownloadableArchives/>
<UpdateFile CompressedSize="0" OS="Any" UncompressedSize="0"/>
<SHA1>55c913d943ac8c893b0c8cf2295ccabff5ae9a41</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt5.5140.qtscript.wasm_32</Name>
<DisplayName>Qt Script for WebAssembly</DisplayName>
<Description/>
<Version>5.14.0-0-201912110813</Version>
<ReleaseDate>2019-12-11</ReleaseDate>
<AutoDependOn>qt.qt5.5140.qtscript, qt.qt5.5140.wasm_32</AutoDependOn>
<Dependencies>qt.qt5.5140.wasm_32</Dependencies>
<Virtual>true</Virtual>
<Script>installscript.qs</Script>
<SortingPriority/>
<DownloadableArchives>qtscript-Windows-Windows_10-Mingw73-Windows-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile CompressedSize="4177683" OS="Any" UncompressedSize="12729104"/>
<SHA1>6951cdbfa4474875de4f6de446a1e2b6f78dd40b</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt5.5140.qtvirtualkeyboard</Name>
<DisplayName>Qt Virtual Keyboard</DisplayName>
<Description>The Qt Virtual Keyboard is a Qt Quick virtual keyboard that you can plug in to your platform or application. You can extend it with your own layouts and styles.&lt;br>&lt;br>This component is available under commercial licenses from The Qt Company, or under GPL v3. For open source use, please note the additional requirements compared to LGPL v3.</Description>
<Version>5.14.0-0-201912110813</Version>
<ReleaseDate>2019-12-11</ReleaseDate>
<Default>false</Default>
<SortingPriority>85</SortingPriority>
<Dependencies>qt.qt5.5140.doc.qtvirtualkeyboard, qt.qt5.5140.examples.qtvirtualkeyboard</Dependencies>
<AutoDependOn/>
<Script>installscript.qs</Script>
<DownloadableArchives/>
<UpdateFile CompressedSize="0" OS="Any" UncompressedSize="0"/>
<SHA1>f20beb1a53b150ed1ff6c9b04fb4717f955cff20</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt5.5140.qtvirtualkeyboard.wasm_32</Name>
<DisplayName>Qt Virtual Keyboard for WebAssembly</DisplayName>
<Description/>
<Version>5.14.0-0-201912110813</Version>
<ReleaseDate>2019-12-11</ReleaseDate>
<AutoDependOn>qt.qt5.5140.qtvirtualkeyboard, qt.qt5.5140.wasm_32</AutoDependOn>
<Dependencies>qt.qt5.5140.wasm_32</Dependencies>
<Virtual>true</Virtual>
<Script>installscript.qs</Script>
<SortingPriority/>
<DownloadableArchives>qtvirtualkeyboard-Windows-Windows_10-Mingw73-Windows-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile CompressedSize="3162708" OS="Any" UncompressedSize="8341816"/>
<SHA1>b68ed8d9aabf3465e1ab1e4d90b00540d88c0f0b</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt5.5140.qtwebglplugin</Name>
<DisplayName>Qt WebGL Streaming Plugin</DisplayName>
<Description>The Qt WebGL Streaming Plugin is a Qt Platform Abstraction plugin which provides streaming of Qt Quick &amp; Qt OpenGL applications over the network to a WebGL capable browser.&lt;br>&lt;br>This component is available under commercial licenses from The Qt Company, or under GPL v3. For open source use, please note the additional requirements compared to LGPL v3.</Description>
<Version>5.14.0-0-201912110813</Version>
<ReleaseDate>2019-12-11</ReleaseDate>
<Default>false</Default>
<SortingPriority>10</SortingPriority>
<AutoDependOn/>
<Script>installscript.qs</Script>
<DownloadableArchives/>
<UpdateFile CompressedSize="0" OS="Any" UncompressedSize="0"/>
<SHA1>d6731dfbdd646821d6862d010e1fcaf3177dcaac</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt5.5140.qtwebglplugin.wasm_32</Name>
<DisplayName>Qt WebGL Streaming Plugin for WebAssembly</DisplayName>
<Description>Qt WebGL Streaming Plugin</Description>
<Version>5.14.0-0-201912110813</Version>
<ReleaseDate>2019-12-11</ReleaseDate>
<AutoDependOn>qt.qt5.5140.qtwebglplugin, qt.qt5.5140.wasm_32</AutoDependOn>
<Dependencies>qt.qt5.5140.wasm_32</Dependencies>
<Virtual>true</Virtual>
<Script>installscript.qs</Script>
<SortingPriority/>
<DownloadableArchives>qtwebglplugin-Windows-Windows_10-Mingw73-Windows-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile CompressedSize="750212" OS="Any" UncompressedSize="2088810"/>
<SHA1>7ffe111181b4a1dd3826c3696b16ee94dc267086</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt5.5140.wasm_32</Name>
<DisplayName>WebAssembly</DisplayName>
<Description>Qt 5.14.0 Prebuilt Components for WebAssembly (Desktop)</Description>
<Version>5.14.0-0-201912110813</Version>
<ReleaseDate>2019-12-11</ReleaseDate>
<Dependencies>qt.tools.qtcreator, qt.qt5.5140.doc, qt.qt5.5140.examples</Dependencies>
<AutoDependOn/>
<Default>false</Default>
<Script>installscript.qs</Script>
<SortingPriority>700</SortingPriority>
<DownloadableArchives>qtbase-Windows-Windows_10-Mingw73-Windows-WebAssembly-X86_64.7z, qtwebchannel-Windows-Windows_10-Mingw73-Windows-WebAssembly-X86_64.7z, qtmultimedia-Windows-Windows_10-Mingw73-Windows-WebAssembly-X86_64.7z, qttranslations-Windows-Windows_10-Mingw73-Windows-WebAssembly-X86_64.7z, qtgraphicaleffects-Windows-Windows_10-Mingw73-Windows-WebAssembly-X86_64.7z, qtsvg-Windows-Windows_10-Mingw73-Windows-WebAssembly-X86_64.7z, qtdeclarative-Windows-Windows_10-Mingw73-Windows-WebAssembly-X86_64.7z, qtwebsockets-Windows-Windows_10-Mingw73-Windows-WebAssembly-X86_64.7z, qtimageformats-Windows-Windows_10-Mingw73-Windows-WebAssembly-X86_64.7z, qttools-Windows-Windows_10-Mingw73-Windows-WebAssembly-X86_64.7z, qtxmlpatterns-Windows-Windows_10-Mingw73-Windows-WebAssembly-X86_64.7z, qtsensors-Windows-Windows_10-Mingw73-Windows-WebAssembly-X86_64.7z, qtquickcontrols-Windows-Windows_10-Mingw73-Windows-WebAssembly-X86_64.7z, qtquickcontrols2-Windows-Windows_10-Mingw73-Windows-WebAssembly-X86_64.7z, qtwebview-Windows-Windows_10-Mingw73-Windows-WebAssembly-X86_64.7z, qtscxml-Windows-Windows_10-Mingw73-Windows-WebAssembly-X86_64.7z, qtgamepad-Windows-Windows_10-Mingw73-Windows-WebAssembly-X86_64.7z, qtspeech-Windows-Windows_10-Mingw73-Windows-WebAssembly-X86_64.7z, qtremoteobjects-Windows-Windows_10-Mingw73-Windows-WebAssembly-X86_64.7z, x86_64-7.3.0-release-posix-seh-rt_v5-rev0-runtime.7z</DownloadableArchives>
<UpdateFile CompressedSize="78067039" OS="Any" UncompressedSize="280467092"/>
<SHA1>3650fe70aa645834b180b63e27689c55cce884b4</SHA1>
</PackageUpdate>
<MetadataName>2020-08-21-1954_meta.7z</MetadataName>
<SHA1>69ef012916d9974bface5a15406e8acdf9158fa5</SHA1>
</Updates>

View File

@@ -0,0 +1,26 @@
{
"architectures": [
"wasm_multithread"
],
"modules_by_arch": {
"wasm_multithread": [
"qtcharts",
"qtdatavis3d",
"qtgrpc",
"qthttpserver",
"qtimageformats",
"qtlottie",
"qtmultimedia",
"qtquick3dphysics",
"qtscxml",
"qtspeech",
"qtvirtualkeyboard",
"qtwebchannel",
"qtwebsockets",
"qt5compat",
"qtquick3d",
"qtquicktimeline",
"qtshadertools"
]
}
}

View File

@@ -0,0 +1,290 @@
<Updates>
<ApplicationName>{AnyApplication}</ApplicationName>
<ApplicationVersion>1.0.0</ApplicationVersion>
<Checksum>true</Checksum>
<PackageUpdate>
<Name>qt.qt6.650.addons.qtcharts.wasm_multithread</Name>
<DisplayName>Qt Charts for WebAssembly</DisplayName>
<Description/>
<Version>6.5.0-0-202301241223</Version>
<ReleaseDate>2023-01-24</ReleaseDate>
<AutoDependOn>qt.qt6.650.addons.qtcharts, qt.qt6.650.wasm_multithread</AutoDependOn>
<Dependencies>qt.qt6.650.wasm_multithread</Dependencies>
<Virtual>true</Virtual>
<Script>installscript.qs</Script>
<SortingPriority/>
<DownloadableArchives>qtcharts-MacOS-MacOS_12-Clang-MacOS-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile CompressedSize="779232" UncompressedSize="7404114" OS="Any"/>
<SHA1>a84793455e6f234204956d2a535ef7487e12f746</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt6.650.addons.qtdatavis3d.wasm_multithread</Name>
<DisplayName>Qt Data Visualization for WebAssembly</DisplayName>
<Description/>
<Version>6.5.0-0-202301241223</Version>
<ReleaseDate>2023-01-24</ReleaseDate>
<AutoDependOn>qt.qt6.650.addons.qtdatavis3d, qt.qt6.650.wasm_multithread</AutoDependOn>
<Dependencies>qt.qt6.650.wasm_multithread</Dependencies>
<Virtual>true</Virtual>
<Script>installscript.qs</Script>
<SortingPriority/>
<DownloadableArchives>qtdatavis3d-MacOS-MacOS_12-Clang-MacOS-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile CompressedSize="598226" UncompressedSize="4649321" OS="Any"/>
<SHA1>942fb21a8ba4338a2c94c15bc3564d9ed016aa91</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt6.650.addons.qtgrpc.wasm_multithread</Name>
<DisplayName>Qt Protobuf and Qt GRPC for WebAssembly</DisplayName>
<Description/>
<Version>6.5.0-0-202301241223</Version>
<ReleaseDate>2023-01-24</ReleaseDate>
<AutoDependOn>qt.qt6.650.addons.qtgrpc, qt.qt6.650.wasm_multithread</AutoDependOn>
<Dependencies>qt.qt6.650.wasm_multithread</Dependencies>
<Virtual>true</Virtual>
<Script>installscript.qs</Script>
<SortingPriority/>
<DownloadableArchives>qtgrpc-MacOS-MacOS_12-Clang-MacOS-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile CompressedSize="194841" UncompressedSize="2725367" OS="Any"/>
<SHA1>eab733c1b40b2ba93eac301090ed2e40d1bfb309</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt6.650.addons.qthttpserver.wasm_multithread</Name>
<DisplayName>Qt HTTP Server for WebAssembly</DisplayName>
<Description/>
<Version>6.5.0-0-202301241223</Version>
<ReleaseDate>2023-01-24</ReleaseDate>
<AutoDependOn>qt.qt6.650.addons.qthttpserver, qt.qt6.650.wasm_multithread</AutoDependOn>
<Dependencies>qt.qt6.650.wasm_multithread</Dependencies>
<Virtual>true</Virtual>
<Script>installscript.qs</Script>
<SortingPriority/>
<DownloadableArchives>qthttpserver-MacOS-MacOS_12-Clang-MacOS-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile CompressedSize="60073" UncompressedSize="297714" OS="Any"/>
<SHA1>14b847981005d193938f7c3e8f6608d8518a6366</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt6.650.addons.qtimageformats.wasm_multithread</Name>
<DisplayName>Qt ImageFormats for WebAssembly</DisplayName>
<Description/>
<Version>6.5.0-0-202301241223</Version>
<ReleaseDate>2023-01-24</ReleaseDate>
<AutoDependOn>qt.qt6.650.addons.qtimageformats, qt.qt6.650.wasm_multithread</AutoDependOn>
<Dependencies>qt.qt6.650.wasm_multithread</Dependencies>
<Virtual>true</Virtual>
<Script>installscript.qs</Script>
<SortingPriority/>
<DownloadableArchives>qtimageformats-MacOS-MacOS_12-Clang-MacOS-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile CompressedSize="303380" UncompressedSize="1283471" OS="Any"/>
<SHA1>ff3b43b3e1b9fe078761b75dada9d725f47d9af3</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt6.650.addons.qtlottie.wasm_multithread</Name>
<DisplayName>Qt Lottie Animation for WebAssembly</DisplayName>
<Description/>
<Version>6.5.0-0-202301241223</Version>
<ReleaseDate>2023-01-24</ReleaseDate>
<AutoDependOn>qt.qt6.650.addons.qtlottie, qt.qt6.650.wasm_multithread</AutoDependOn>
<Dependencies>qt.qt6.650.wasm_multithread</Dependencies>
<Virtual>true</Virtual>
<Script>installscript.qs</Script>
<SortingPriority/>
<DownloadableArchives>qtlottie-MacOS-MacOS_12-Clang-MacOS-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile CompressedSize="155315" UncompressedSize="1007914" OS="Any"/>
<SHA1>3869563cef20f85ecc55e66fd0875a37a820175c</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt6.650.addons.qtmultimedia.wasm_multithread</Name>
<DisplayName>Qt Multimedia for WebAssembly</DisplayName>
<Description/>
<Version>6.5.0-0-202301241223</Version>
<ReleaseDate>2023-01-24</ReleaseDate>
<AutoDependOn>qt.qt6.650.addons.qtmultimedia, qt.qt6.650.wasm_multithread</AutoDependOn>
<Dependencies>qt.qt6.650.wasm_multithread</Dependencies>
<Virtual>true</Virtual>
<Script>installscript.qs</Script>
<SortingPriority/>
<DownloadableArchives>qtmultimedia-MacOS-MacOS_12-Clang-MacOS-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile CompressedSize="756305" UncompressedSize="5109691" OS="Any"/>
<SHA1>8f7053696b1258f4e0511fd233e24be98b96bddf</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt6.650.addons.qtquick3dphysics</Name>
<DisplayName>Quick: 3D Physics</DisplayName>
<Description>Qt Quick 3D Physics provides a high-level QML module adding physical simulation capabilities to Qt Quick 3D.</Description>
<Version>6.5.0-0-202301241223</Version>
<ReleaseDate>2023-01-24</ReleaseDate>
<Default>false</Default>
<Dependencies>qt.qt6.650.doc.qtquick3dphysics, qt.qt6.650.examples.qtquick3dphysics, qt.qt6.650.qtquick3d, qt.qt6.650.qtshadertools</Dependencies>
<AutoDependOn/>
<DownloadableArchives/>
<UpdateFile CompressedSize="0" UncompressedSize="0" OS="Any"/>
<SHA1>05989ccb769ed6b46a60e453d401dd4415609363</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt6.650.addons.qtquick3dphysics.wasm_multithread</Name>
<DisplayName>Quick: 3D Physics for WebAssembly</DisplayName>
<Description/>
<Version>6.5.0-0-202301241223</Version>
<ReleaseDate>2023-01-24</ReleaseDate>
<AutoDependOn>qt.qt6.650.addons.qtquick3dphysics, qt.qt6.650.wasm_multithread</AutoDependOn>
<Dependencies>qt.qt6.650.wasm_multithread</Dependencies>
<Virtual>true</Virtual>
<Script>installscript.qs</Script>
<SortingPriority/>
<DownloadableArchives>qtquick3dphysics-MacOS-MacOS_12-Clang-MacOS-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile CompressedSize="1695314" UncompressedSize="11015126" OS="Any"/>
<SHA1>7cfea014ddc41082f6ac52a72930ec174d2cd484</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt6.650.addons.qtscxml.wasm_multithread</Name>
<DisplayName>Qt State Machines for WebAssembly</DisplayName>
<Description/>
<Version>6.5.0-0-202301241223</Version>
<ReleaseDate>2023-01-24</ReleaseDate>
<AutoDependOn>qt.qt6.650.addons.qtscxml, qt.qt6.650.wasm_multithread</AutoDependOn>
<Dependencies>qt.qt6.650.wasm_multithread</Dependencies>
<Virtual>true</Virtual>
<Script>installscript.qs</Script>
<SortingPriority/>
<DownloadableArchives>qtscxml-MacOS-MacOS_12-Clang-MacOS-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile CompressedSize="372984" UncompressedSize="3111720" OS="Any"/>
<SHA1>a6fb82aa712eae15f582835a3e858ad4b94961ac</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt6.650.addons.qtspeech.wasm_multithread</Name>
<DisplayName>Qt Speech for WebAssembly</DisplayName>
<Description/>
<Version>6.5.0-0-202301241223</Version>
<ReleaseDate>2023-01-24</ReleaseDate>
<AutoDependOn>qt.qt6.650.addons.qtspeech, qt.qt6.650.wasm_multithread</AutoDependOn>
<Dependencies>qt.qt6.650.wasm_multithread</Dependencies>
<Virtual>true</Virtual>
<Script>installscript.qs</Script>
<SortingPriority/>
<DownloadableArchives>qtspeech-MacOS-MacOS_12-Clang-MacOS-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile CompressedSize="61655" UncompressedSize="448732" OS="Any"/>
<SHA1>2e444441796b80824a742107514797a2d8e97234</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt6.650.addons.qtvirtualkeyboard.wasm_multithread</Name>
<DisplayName>Qt Virtual Keyboard for WebAssembly</DisplayName>
<Description/>
<Version>6.5.0-0-202301241223</Version>
<ReleaseDate>2023-01-24</ReleaseDate>
<AutoDependOn>qt.qt6.650.addons.qtvirtualkeyboard, qt.qt6.650.wasm_multithread</AutoDependOn>
<Dependencies>qt.qt6.650.wasm_multithread</Dependencies>
<Virtual>true</Virtual>
<Script>installscript.qs</Script>
<SortingPriority/>
<DownloadableArchives>qtvirtualkeyboard-MacOS-MacOS_12-Clang-MacOS-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile CompressedSize="2202968" UncompressedSize="6817472" OS="Any"/>
<SHA1>fd072ead9d8d55fac3a9efb0e2c7a92af8fb047d</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt6.650.addons.qtwebchannel.wasm_multithread</Name>
<DisplayName>Qt WebChannel for WebAssembly</DisplayName>
<Description/>
<Version>6.5.0-0-202301241223</Version>
<ReleaseDate>2023-01-24</ReleaseDate>
<AutoDependOn>qt.qt6.650.addons.qtwebchannel, qt.qt6.650.wasm_multithread</AutoDependOn>
<Dependencies>qt.qt6.650.wasm_multithread</Dependencies>
<Virtual>true</Virtual>
<Script>installscript.qs</Script>
<SortingPriority/>
<DownloadableArchives>qtwebchannel-MacOS-MacOS_12-Clang-MacOS-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile CompressedSize="93681" UncompressedSize="525510" OS="Any"/>
<SHA1>802b47541de55f8528e436d0354421138e598f90</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt6.650.addons.qtwebsockets.wasm_multithread</Name>
<DisplayName>Qt WebSockets for WebAssembly</DisplayName>
<Description/>
<Version>6.5.0-0-202301241223</Version>
<ReleaseDate>2023-01-24</ReleaseDate>
<AutoDependOn>qt.qt6.650.addons.qtwebsockets, qt.qt6.650.wasm_multithread</AutoDependOn>
<Dependencies>qt.qt6.650.wasm_multithread</Dependencies>
<Virtual>true</Virtual>
<Script>installscript.qs</Script>
<SortingPriority/>
<DownloadableArchives>qtwebsockets-MacOS-MacOS_12-Clang-MacOS-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile CompressedSize="90033" UncompressedSize="501424" OS="Any"/>
<SHA1>f5ea2a5ab7011919f9efd72c482bd41d4b9125b6</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt6.650.qt5compat.wasm_multithread</Name>
<DisplayName>Qt 5 Compatibility Module for WebAssembly</DisplayName>
<Description/>
<Version>6.5.0-0-202301241223</Version>
<ReleaseDate>2023-01-24</ReleaseDate>
<AutoDependOn>qt.qt6.650.qt5compat, qt.qt6.650.wasm_multithread</AutoDependOn>
<Dependencies>qt.qt6.650.wasm_multithread</Dependencies>
<Virtual>true</Virtual>
<Script>installscript.qs</Script>
<SortingPriority/>
<DownloadableArchives>qt5compat-MacOS-MacOS_12-Clang-MacOS-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile CompressedSize="689869" UncompressedSize="2786165" OS="Any"/>
<SHA1>8573219387c9d6448da92f9c0eb2cd77fc5e4d6a</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt6.650.qtquick3d.wasm_multithread</Name>
<DisplayName>Qt Quick 3D for WebAssembly</DisplayName>
<Description/>
<Version>6.5.0-0-202301241223</Version>
<ReleaseDate>2023-01-24</ReleaseDate>
<AutoDependOn>qt.qt6.650.qtquick3d, qt.qt6.650.wasm_multithread</AutoDependOn>
<Dependencies>qt.qt6.650.wasm_multithread</Dependencies>
<Virtual>true</Virtual>
<Script>installscript.qs</Script>
<SortingPriority/>
<DownloadableArchives>qtquick3d-MacOS-MacOS_12-Clang-MacOS-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile CompressedSize="2049798" UncompressedSize="13429045" OS="Any"/>
<SHA1>5a92d04743dc47cd410922b312018b2ca13707a9</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt6.650.qtquicktimeline.wasm_multithread</Name>
<DisplayName>Qt Quick Timeline for WebAssembly</DisplayName>
<Description/>
<Version>6.5.0-0-202301241223</Version>
<ReleaseDate>2023-01-24</ReleaseDate>
<AutoDependOn>qt.qt6.650.qtquicktimeline, qt.qt6.650.wasm_multithread</AutoDependOn>
<Dependencies>qt.qt6.650.wasm_multithread</Dependencies>
<Virtual>true</Virtual>
<Script>installscript.qs</Script>
<SortingPriority/>
<DownloadableArchives>qtquicktimeline-MacOS-MacOS_12-Clang-MacOS-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile CompressedSize="44721" UncompressedSize="263991" OS="Any"/>
<SHA1>7bce5d03611d856cf1675844c736a9f67dea055d</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt6.650.qtshadertools.wasm_multithread</Name>
<DisplayName>Qt Shader Tools for WebAssembly</DisplayName>
<Description/>
<Version>6.5.0-0-202301241223</Version>
<ReleaseDate>2023-01-24</ReleaseDate>
<AutoDependOn>qt.qt6.650.qtshadertools, qt.qt6.650.wasm_multithread</AutoDependOn>
<Dependencies>qt.qt6.650.wasm_multithread</Dependencies>
<Virtual>true</Virtual>
<Script>installscript.qs</Script>
<SortingPriority/>
<DownloadableArchives>qtshadertools-MacOS-MacOS_12-Clang-MacOS-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile CompressedSize="1306343" UncompressedSize="12245299" OS="Any"/>
<SHA1>c39e4c3ccda1d23253bf8049b417284380cc2715</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt6.650.wasm_multithread</Name>
<DisplayName>WebAssembly (multi-threaded)</DisplayName>
<Description>Qt 6.5.0 Prebuilt Components for WebAssembly (multi-threaded).</Description>
<Version>6.5.0-0-202301241223</Version>
<ReleaseDate>2023-01-24</ReleaseDate>
<Dependencies/>
<AutoDependOn/>
<Default>false</Default>
<Script>installscript.qs</Script>
<SortingPriority>700</SortingPriority>
<DownloadableArchives>qtbase-MacOS-MacOS_12-Clang-MacOS-WebAssembly-X86_64.7z, qtdeclarative-MacOS-MacOS_12-Clang-MacOS-WebAssembly-X86_64.7z, qtsvg-MacOS-MacOS_12-Clang-MacOS-WebAssembly-X86_64.7z, qttools-MacOS-MacOS_12-Clang-MacOS-WebAssembly-X86_64.7z, qttranslations-MacOS-MacOS_12-Clang-MacOS-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile CompressedSize="27570046" UncompressedSize="188468236" OS="Any"/>
<SHA1>c49a2335d6bb9ecd42a4d04c0693b928eeb03f19</SHA1>
</PackageUpdate>
<SHA1>e6fc59b20903417c2ab109b8aeb90f73e5cbabc7</SHA1>
<MetadataName>2023-01-24-1447_meta.7z</MetadataName>
</Updates>

View File

@@ -0,0 +1,26 @@
{
"architectures": [
"wasm_singlethread"
],
"modules_by_arch": {
"wasm_singlethread": [
"qtcharts",
"qtdatavis3d",
"qtgrpc",
"qthttpserver",
"qtimageformats",
"qtlottie",
"qtmultimedia",
"qtquick3dphysics",
"qtscxml",
"qtspeech",
"qtvirtualkeyboard",
"qtwebchannel",
"qtwebsockets",
"qt5compat",
"qtquick3d",
"qtquicktimeline",
"qtshadertools"
]
}
}

View File

@@ -0,0 +1,290 @@
<Updates>
<ApplicationName>{AnyApplication}</ApplicationName>
<ApplicationVersion>1.0.0</ApplicationVersion>
<Checksum>true</Checksum>
<PackageUpdate>
<Name>qt.qt6.650.addons.qtcharts.wasm_singlethread</Name>
<DisplayName>Qt Charts for WebAssembly</DisplayName>
<Description/>
<Version>6.5.0-0-202301241223</Version>
<ReleaseDate>2023-01-24</ReleaseDate>
<AutoDependOn>qt.qt6.650.addons.qtcharts, qt.qt6.650.wasm_singlethread</AutoDependOn>
<Dependencies>qt.qt6.650.wasm_singlethread</Dependencies>
<Virtual>true</Virtual>
<Script>installscript.qs</Script>
<SortingPriority/>
<DownloadableArchives>qtcharts-Windows-Windows_10_22H2-Clang-Windows-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile UncompressedSize="7422857" CompressedSize="783179" OS="Any"/>
<SHA1>8f5ed7a6950398e9c0009a1e71514c885d4950ae</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt6.650.addons.qtdatavis3d.wasm_singlethread</Name>
<DisplayName>Qt Data Visualization for WebAssembly</DisplayName>
<Description/>
<Version>6.5.0-0-202301241223</Version>
<ReleaseDate>2023-01-24</ReleaseDate>
<AutoDependOn>qt.qt6.650.addons.qtdatavis3d, qt.qt6.650.wasm_singlethread</AutoDependOn>
<Dependencies>qt.qt6.650.wasm_singlethread</Dependencies>
<Virtual>true</Virtual>
<Script>installscript.qs</Script>
<SortingPriority/>
<DownloadableArchives>qtdatavis3d-Windows-Windows_10_22H2-Clang-Windows-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile UncompressedSize="4668609" CompressedSize="603274" OS="Any"/>
<SHA1>b721d4ccc387c2bce2064acda62e838bf3b0faf5</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt6.650.addons.qtgrpc.wasm_singlethread</Name>
<DisplayName>Qt Protobuf and Qt GRPC for WebAssembly</DisplayName>
<Description/>
<Version>6.5.0-0-202301241223</Version>
<ReleaseDate>2023-01-24</ReleaseDate>
<AutoDependOn>qt.qt6.650.addons.qtgrpc, qt.qt6.650.wasm_singlethread</AutoDependOn>
<Dependencies>qt.qt6.650.wasm_singlethread</Dependencies>
<Virtual>true</Virtual>
<Script>installscript.qs</Script>
<SortingPriority/>
<DownloadableArchives>qtgrpc-Windows-Windows_10_22H2-Clang-Windows-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile UncompressedSize="2677934" CompressedSize="192818" OS="Any"/>
<SHA1>8ee03c76df8602753c17e09471969050ff9ad143</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt6.650.addons.qthttpserver.wasm_singlethread</Name>
<DisplayName>Qt HTTP Server for WebAssembly</DisplayName>
<Description/>
<Version>6.5.0-0-202301241223</Version>
<ReleaseDate>2023-01-24</ReleaseDate>
<AutoDependOn>qt.qt6.650.addons.qthttpserver, qt.qt6.650.wasm_singlethread</AutoDependOn>
<Dependencies>qt.qt6.650.wasm_singlethread</Dependencies>
<Virtual>true</Virtual>
<Script>installscript.qs</Script>
<SortingPriority/>
<DownloadableArchives>qthttpserver-Windows-Windows_10_22H2-Clang-Windows-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile UncompressedSize="280043" CompressedSize="56907" OS="Any"/>
<SHA1>a517c99db4438b786775d896dce33f26776484ce</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt6.650.addons.qtimageformats.wasm_singlethread</Name>
<DisplayName>Qt ImageFormats for WebAssembly</DisplayName>
<Description/>
<Version>6.5.0-0-202301241223</Version>
<ReleaseDate>2023-01-24</ReleaseDate>
<AutoDependOn>qt.qt6.650.addons.qtimageformats, qt.qt6.650.wasm_singlethread</AutoDependOn>
<Dependencies>qt.qt6.650.wasm_singlethread</Dependencies>
<Virtual>true</Virtual>
<Script>installscript.qs</Script>
<SortingPriority/>
<DownloadableArchives>qtimageformats-Windows-Windows_10_22H2-Clang-Windows-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile UncompressedSize="1284624" CompressedSize="305040" OS="Any"/>
<SHA1>21721377df4a85a447883183d4c43490537bc5f7</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt6.650.addons.qtlottie.wasm_singlethread</Name>
<DisplayName>Qt Lottie Animation for WebAssembly</DisplayName>
<Description/>
<Version>6.5.0-0-202301241223</Version>
<ReleaseDate>2023-01-24</ReleaseDate>
<AutoDependOn>qt.qt6.650.addons.qtlottie, qt.qt6.650.wasm_singlethread</AutoDependOn>
<Dependencies>qt.qt6.650.wasm_singlethread</Dependencies>
<Virtual>true</Virtual>
<Script>installscript.qs</Script>
<SortingPriority/>
<DownloadableArchives>qtlottie-Windows-Windows_10_22H2-Clang-Windows-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile UncompressedSize="1017662" CompressedSize="157225" OS="Any"/>
<SHA1>e84a9a593ac3ce61fbf01f28839adca16ba72662</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt6.650.addons.qtmultimedia.wasm_singlethread</Name>
<DisplayName>Qt Multimedia for WebAssembly</DisplayName>
<Description/>
<Version>6.5.0-0-202301241223</Version>
<ReleaseDate>2023-01-24</ReleaseDate>
<AutoDependOn>qt.qt6.650.addons.qtmultimedia, qt.qt6.650.wasm_singlethread</AutoDependOn>
<Dependencies>qt.qt6.650.wasm_singlethread</Dependencies>
<Virtual>true</Virtual>
<Script>installscript.qs</Script>
<SortingPriority/>
<DownloadableArchives>qtmultimedia-Windows-Windows_10_22H2-Clang-Windows-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile UncompressedSize="4990392" CompressedSize="736850" OS="Any"/>
<SHA1>b3cec4c569f81833fe8950eac8ef8ad18efa9c8e</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt6.650.addons.qtquick3dphysics</Name>
<DisplayName>Quick: 3D Physics</DisplayName>
<Description>Qt Quick 3D Physics provides a high-level QML module adding physical simulation capabilities to Qt Quick 3D.</Description>
<Version>6.5.0-0-202301241223</Version>
<ReleaseDate>2023-01-24</ReleaseDate>
<Default>false</Default>
<Dependencies>qt.qt6.650.doc.qtquick3dphysics, qt.qt6.650.examples.qtquick3dphysics, qt.qt6.650.qtquick3d, qt.qt6.650.qtshadertools</Dependencies>
<AutoDependOn/>
<DownloadableArchives/>
<UpdateFile UncompressedSize="0" CompressedSize="0" OS="Any"/>
<SHA1>d7ae546041aa8afc9d75615538a7de5c74df2c76</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt6.650.addons.qtquick3dphysics.wasm_singlethread</Name>
<DisplayName>Quick: 3D Physics for WebAssembly</DisplayName>
<Description/>
<Version>6.5.0-0-202301241223</Version>
<ReleaseDate>2023-01-24</ReleaseDate>
<AutoDependOn>qt.qt6.650.addons.qtquick3dphysics, qt.qt6.650.wasm_singlethread</AutoDependOn>
<Dependencies>qt.qt6.650.wasm_singlethread</Dependencies>
<Virtual>true</Virtual>
<Script>installscript.qs</Script>
<SortingPriority/>
<DownloadableArchives>qtquick3dphysics-Windows-Windows_10_22H2-Clang-Windows-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile UncompressedSize="11025662" CompressedSize="1705261" OS="Any"/>
<SHA1>ffae40c5ea3a64fad5d3c891b3321fb84f5dbb10</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt6.650.addons.qtscxml.wasm_singlethread</Name>
<DisplayName>Qt State Machines for WebAssembly</DisplayName>
<Description/>
<Version>6.5.0-0-202301241223</Version>
<ReleaseDate>2023-01-24</ReleaseDate>
<AutoDependOn>qt.qt6.650.addons.qtscxml, qt.qt6.650.wasm_singlethread</AutoDependOn>
<Dependencies>qt.qt6.650.wasm_singlethread</Dependencies>
<Virtual>true</Virtual>
<Script>installscript.qs</Script>
<SortingPriority/>
<DownloadableArchives>qtscxml-Windows-Windows_10_22H2-Clang-Windows-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile UncompressedSize="3131289" CompressedSize="375756" OS="Any"/>
<SHA1>196ec95bf0b8b94c71101b5b100e76a8219c7aa6</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt6.650.addons.qtspeech.wasm_singlethread</Name>
<DisplayName>Qt Speech for WebAssembly</DisplayName>
<Description/>
<Version>6.5.0-0-202301241223</Version>
<ReleaseDate>2023-01-24</ReleaseDate>
<AutoDependOn>qt.qt6.650.addons.qtspeech, qt.qt6.650.wasm_singlethread</AutoDependOn>
<Dependencies>qt.qt6.650.wasm_singlethread</Dependencies>
<Virtual>true</Virtual>
<Script>installscript.qs</Script>
<SortingPriority/>
<DownloadableArchives>qtspeech-Windows-Windows_10_22H2-Clang-Windows-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile UncompressedSize="448553" CompressedSize="61755" OS="Any"/>
<SHA1>22af0b136ee5af85d5231e909644f05a2610c333</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt6.650.addons.qtvirtualkeyboard.wasm_singlethread</Name>
<DisplayName>Qt Virtual Keyboard for WebAssembly</DisplayName>
<Description/>
<Version>6.5.0-0-202301241223</Version>
<ReleaseDate>2023-01-24</ReleaseDate>
<AutoDependOn>qt.qt6.650.addons.qtvirtualkeyboard, qt.qt6.650.wasm_singlethread</AutoDependOn>
<Dependencies>qt.qt6.650.wasm_singlethread</Dependencies>
<Virtual>true</Virtual>
<Script>installscript.qs</Script>
<SortingPriority/>
<DownloadableArchives>qtvirtualkeyboard-Windows-Windows_10_22H2-Clang-Windows-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile UncompressedSize="5572282" CompressedSize="1702607" OS="Any"/>
<SHA1>0bf68731445a07c3d0343a7b2be575792e1d74ec</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt6.650.addons.qtwebchannel.wasm_singlethread</Name>
<DisplayName>Qt WebChannel for WebAssembly</DisplayName>
<Description/>
<Version>6.5.0-0-202301241223</Version>
<ReleaseDate>2023-01-24</ReleaseDate>
<AutoDependOn>qt.qt6.650.addons.qtwebchannel, qt.qt6.650.wasm_singlethread</AutoDependOn>
<Dependencies>qt.qt6.650.wasm_singlethread</Dependencies>
<Virtual>true</Virtual>
<Script>installscript.qs</Script>
<SortingPriority/>
<DownloadableArchives>qtwebchannel-Windows-Windows_10_22H2-Clang-Windows-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile UncompressedSize="486650" CompressedSize="88294" OS="Any"/>
<SHA1>3b77f28422d469dd639f53cfa3c90f17581599f2</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt6.650.addons.qtwebsockets.wasm_singlethread</Name>
<DisplayName>Qt WebSockets for WebAssembly</DisplayName>
<Description/>
<Version>6.5.0-0-202301241223</Version>
<ReleaseDate>2023-01-24</ReleaseDate>
<AutoDependOn>qt.qt6.650.addons.qtwebsockets, qt.qt6.650.wasm_singlethread</AutoDependOn>
<Dependencies>qt.qt6.650.wasm_singlethread</Dependencies>
<Virtual>true</Virtual>
<Script>installscript.qs</Script>
<SortingPriority/>
<DownloadableArchives>qtwebsockets-Windows-Windows_10_22H2-Clang-Windows-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile UncompressedSize="508364" CompressedSize="90577" OS="Any"/>
<SHA1>c966978a11ef2baee84e26bc8cee4ca636b87130</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt6.650.qt5compat.wasm_singlethread</Name>
<DisplayName>Qt 5 Compatibility Module for WebAssembly</DisplayName>
<Description/>
<Version>6.5.0-0-202301241223</Version>
<ReleaseDate>2023-01-24</ReleaseDate>
<AutoDependOn>qt.qt6.650.qt5compat, qt.qt6.650.wasm_singlethread</AutoDependOn>
<Dependencies>qt.qt6.650.wasm_singlethread</Dependencies>
<Virtual>true</Virtual>
<Script>installscript.qs</Script>
<SortingPriority/>
<DownloadableArchives>qt5compat-Windows-Windows_10_22H2-Clang-Windows-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile UncompressedSize="2798732" CompressedSize="693708" OS="Any"/>
<SHA1>4362670c3f297d5f298602e5820843150a394585</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt6.650.qtquick3d.wasm_singlethread</Name>
<DisplayName>Qt Quick 3D for WebAssembly</DisplayName>
<Description/>
<Version>6.5.0-0-202301241223</Version>
<ReleaseDate>2023-01-24</ReleaseDate>
<AutoDependOn>qt.qt6.650.qtquick3d, qt.qt6.650.wasm_singlethread</AutoDependOn>
<Dependencies>qt.qt6.650.wasm_singlethread</Dependencies>
<Virtual>true</Virtual>
<Script>installscript.qs</Script>
<SortingPriority/>
<DownloadableArchives>qtquick3d-Windows-Windows_10_22H2-Clang-Windows-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile UncompressedSize="13484701" CompressedSize="2035967" OS="Any"/>
<SHA1>a8cb6b3e15ed4357b60895a5b8f06938f381cbe4</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt6.650.qtquicktimeline.wasm_singlethread</Name>
<DisplayName>Qt Quick Timeline for WebAssembly</DisplayName>
<Description/>
<Version>6.5.0-0-202301241223</Version>
<ReleaseDate>2023-01-24</ReleaseDate>
<AutoDependOn>qt.qt6.650.qtquicktimeline, qt.qt6.650.wasm_singlethread</AutoDependOn>
<Dependencies>qt.qt6.650.wasm_singlethread</Dependencies>
<Virtual>true</Virtual>
<Script>installscript.qs</Script>
<SortingPriority/>
<DownloadableArchives>qtquicktimeline-Windows-Windows_10_22H2-Clang-Windows-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile UncompressedSize="265991" CompressedSize="44865" OS="Any"/>
<SHA1>e3b17d993959c4f9bf0bf1b1eef3eaa32dfa1135</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt6.650.qtshadertools.wasm_singlethread</Name>
<DisplayName>Qt Shader Tools for WebAssembly</DisplayName>
<Description/>
<Version>6.5.0-0-202301241223</Version>
<ReleaseDate>2023-01-24</ReleaseDate>
<AutoDependOn>qt.qt6.650.qtshadertools, qt.qt6.650.wasm_singlethread</AutoDependOn>
<Dependencies>qt.qt6.650.wasm_singlethread</Dependencies>
<Virtual>true</Virtual>
<Script>installscript.qs</Script>
<SortingPriority/>
<DownloadableArchives>qtshadertools-Windows-Windows_10_22H2-Clang-Windows-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile UncompressedSize="12278702" CompressedSize="1314315" OS="Any"/>
<SHA1>4a159d7a4d73ea9e02a20600425228ea5fc72368</SHA1>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt6.650.wasm_singlethread</Name>
<DisplayName>WebAssembly (single-threaded)</DisplayName>
<Description>Qt 6.5.0 Prebuilt Components for WebAssembly (single-threaded).</Description>
<Version>6.5.0-0-202301241223</Version>
<ReleaseDate>2023-01-24</ReleaseDate>
<Dependencies/>
<AutoDependOn/>
<Default>false</Default>
<Script>installscript.qs</Script>
<SortingPriority>700</SortingPriority>
<DownloadableArchives>qtbase-Windows-Windows_10_22H2-Clang-Windows-WebAssembly-X86_64.7z, qtdeclarative-Windows-Windows_10_22H2-Clang-Windows-WebAssembly-X86_64.7z, qtsvg-Windows-Windows_10_22H2-Clang-Windows-WebAssembly-X86_64.7z, qttools-Windows-Windows_10_22H2-Clang-Windows-WebAssembly-X86_64.7z, qttranslations-Windows-Windows_10_22H2-Clang-Windows-WebAssembly-X86_64.7z</DownloadableArchives>
<UpdateFile UncompressedSize="168349948" CompressedSize="23314413" OS="Any"/>
<SHA1>b3131ac0be2b917e3450eed517fa52aaef7031b3</SHA1>
</PackageUpdate>
<SHA1>c2e369a310d73abefd8f1f1c038762aad5349c31</SHA1>
<MetadataName>2023-01-24-1445_meta.7z</MetadataName>
</Updates>

View File

@@ -9,7 +9,9 @@
"5.14.0 5.14.1 5.14.2",
"5.15.0 5.15.1 5.15.2",
"6.0.0 6.0.1 6.0.2 6.0.3",
"6.1.0"
"6.1.0",
"6.2.0",
"6.5.0"
],
"preview": [
"5.6-preview",
@@ -26,8 +28,11 @@
"wasm": [
"5.13.1 5.13.2",
"5.14.0 5.14.1 5.14.2",
"5.15.0 5.15.1 5.15.2"
"5.15.0 5.15.1 5.15.2",
"6.2.0"
],
"wasm_singlethread": ["6.5.0"],
"wasm_multithread": ["6.5.0"],
"wasm_preview": [
"5.13-preview",
"5.14-preview",
@@ -86,6 +91,7 @@
"tools_ifw",
"tools_generic",
"tools_conan",
"tools_cmake"
"tools_cmake",
"sdktool"
]
}

View File

@@ -43,6 +43,14 @@
<tr><td valign="top">&nbsp;</td><td><a href="tools_generic/">tools_generic/</a></td><td align="right">13-Apr-2021 14:39 </td><td align="right"> - </td><td>&nbsp;</td></tr>
<tr><td valign="top">&nbsp;</td><td><a href="tools_conan/">tools_conan/</a></td><td align="right">15-Feb-2021 12:15 </td><td align="right"> - </td><td>&nbsp;</td></tr>
<tr><td valign="top">&nbsp;</td><td><a href="tools_cmake/">tools_cmake/</a></td><td align="right">07-Jan-2021 14:22 </td><td align="right"> - </td><td>&nbsp;</td></tr>
<tr><td valign="top">&nbsp;</td><td><a href="sdktool/">sdktool/</a></td><td align="right">05-May-2023 10:53 </td><td align="right"> - </td><td>&nbsp;</td></tr>
<tr><td valign="top">&nbsp;</td><td><a href="qt6_650_wasm_singlethread/">qt6_650_wasm_singlethread/</a></td><td align="right">01-Jan-2023 00:00 </td><td align="right"> - </td><td>&nbsp;</td></tr>
<tr><td valign="top">&nbsp;</td><td><a href="qt6_650_wasm_multithread/">qt6_650_wasm_multithread/</a></td><td align="right">01-Jan-2023 00:00 </td><td align="right"> - </td><td>&nbsp;</td></tr>
<tr><td valign="top">&nbsp;</td><td><a href="qt6_650_src_doc_examples/">qt6_650_src_doc_examples/</a></td><td align="right">01-Jan-2023 00:00 </td><td align="right"> - </td><td>&nbsp;</td></tr>
<tr><td valign="top">&nbsp;</td><td><a href="qt6_650/">qt6_650/</a></td><td align="right">01-Jan-2023 00:00 </td><td align="right"> - </td><td>&nbsp;</td></tr>
<tr><td valign="top">&nbsp;</td><td><a href="qt6_620_wasm/">qt6_620_wasm/</a></td><td align="right">29-Sep-2021 12:46 </td><td align="right"> - </td><td>&nbsp;</td></tr>
<tr><td valign="top">&nbsp;</td><td><a href="qt6_620_src_doc_examples/">qt6_620_src_doc_examples/</a></td><td align="right">29-Sep-2021 12:43 </td><td align="right"> - </td><td>&nbsp;</td></tr>
<tr><td valign="top">&nbsp;</td><td><a href="qt6_620/">qt6_620/</a></td><td align="right">29-Sep-2021 12:34 </td><td align="right"> - </td><td>&nbsp;</td></tr>
<tr><td valign="top">&nbsp;</td><td><a href="qt6_610_src_doc_examples/">qt6_610_src_doc_examples/</a></td><td align="right">30-Apr-2021 08:12 </td><td align="right"> - </td><td>&nbsp;</td></tr>
<tr><td valign="top">&nbsp;</td><td><a href="qt6_610/">qt6_610/</a></td><td align="right">30-Apr-2021 08:10 </td><td align="right"> - </td><td>&nbsp;</td></tr>
<tr><td valign="top">&nbsp;</td><td><a href="qt6_603_src_doc_examples/">qt6_603_src_doc_examples/</a></td><td align="right">31-Mar-2021 07:33 </td><td align="right"> - </td><td>&nbsp;</td></tr>

View File

@@ -207,7 +207,10 @@ def test_tools_variants(monkeypatch, tool_name, tool_variant_name, is_expect_fai
return
expect_json = json.loads((Path(__file__).parent / "data" / f"{datafile}-expect.json").read_text("utf-8"))
expect = next(filter(lambda x: x["Name"] == tool_variant_name, expect_json["variants_metadata"]))
try:
expect = next(x for x in expect_json["variants_metadata"] if x["Name"] == tool_variant_name)
except StopIteration:
raise Exception("Wrong test data.")
expected_7z_files = set(expect["DownloadableArchives"])
qt_pkgs = ToolArchives(host, target, tool_name, base, arch=tool_variant_name).archives
url_begin = f"online/qtsdkrepository/mac_x64/{target}/{tool_name}"
@@ -346,6 +349,28 @@ qt_doc_5152_xml_weird_module = """
</PackageUpdate>
</Updates>
"""
qt_doc_5152_xml_no_archives = """
<Updates>
<PackageUpdate>
<Name>qt.qt5.5152.doc.qtcharts</Name>
<DisplayName>Documentation for Qt 5.15.2 GPLv3 components (QtCharts)</DisplayName>
<Description>Documentation for Qt 5.15.2 GPLv3 components (QtCharts)</Description>
<Version>5.15.2-0-202011130724</Version>
<ReleaseDate>2020-11-13</ReleaseDate>
<Dependencies>lots.of.stuff</Dependencies>
<DownloadableArchives/>
</PackageUpdate>
<PackageUpdate>
<Name>qt.qt5.5152.doc</Name>
<DisplayName>Qt 5.15.2 Documentation</DisplayName>
<Description>Qt 5.15.2 documentation</Description>
<Version>5.15.2-0-202011130724</Version>
<ReleaseDate>2020-11-13</ReleaseDate>
<Dependencies>lots.more.stuff</Dependencies>
<DownloadableArchives></DownloadableArchives>
</PackageUpdate>
</Updates>
"""
qt_example_5152_xml_module = """
<Updates>
<PackageUpdate>
@@ -475,6 +500,7 @@ def make_example_archives(subarchives, modules, is_include_base) -> SrcDocExampl
(["tqtc"], ["all"], False, qt_doc_5152_xml_weird_module, make_doc_archives, {"weird-qtcharts-docs.7z"}),
(["tqtc"], ["qtcharts"], False, qt_doc_5152_xml_weird_module, make_doc_archives, {"weird-qtcharts-docs.7z"}),
(["qtdoc"], ["qtcharts"], False, qt_example_5152_xml_module, make_example_archives, {"qtcharts-examples.7z"}),
([], [], True, qt_doc_5152_xml_no_archives, make_doc_archives, set()),
),
)
def test_archives_weird_module_7z_name(

View File

@@ -1,11 +1,13 @@
import re
import sys
from pathlib import Path
from typing import Optional
from tempfile import TemporaryDirectory
from typing import Dict, List, Optional
import pytest
from aqt.exceptions import CliInputError
from aqt.helper import Settings
from aqt.installer import Cli
from aqt.metadata import MetadataFactory, SimpleSpec, Version
@@ -52,13 +54,23 @@ def test_cli_help(capsys):
assert expected_help(out)
def test_cli_check_module():
@pytest.mark.parametrize(
"qt_version, modules, unexpected_modules",
(
("5.11.3", ["qtcharts", "qtwebengine"], []),
("5.11.3", ["not_exist"], ["not_exist"]),
("5.11.3", ["qtcharts", "qtwebengine", "not_exist"], ["not_exist"]),
("5.11.3", None, []),
("5.15.0", ["Unknown"], ["Unknown"]),
),
)
def test_cli_select_unexpected_modules(qt_version: str, modules: Optional[List[str]], unexpected_modules: List[str]):
cli = Cli()
cli._setup_settings()
assert cli._check_modules_arg("5.11.3", ["qtcharts", "qtwebengine"])
assert not cli._check_modules_arg("5.7", ["not_exist"])
assert cli._check_modules_arg("5.14.0", None)
assert not cli._check_modules_arg("5.15.0", ["Unknown"])
assert cli._select_unexpected_modules(qt_version, modules) == unexpected_modules
nonexistent_qt = "5.16.0"
assert cli._select_unexpected_modules(nonexistent_qt, modules) == sorted(modules or [])
def test_cli_check_combination():
@@ -88,8 +100,8 @@ def test_cli_check_version():
("windows", "winrt", "mingw32", "6", None, False),
("windows", "winrt", "mingw32", "bad spec", None, True),
("windows", "android", "android_x86", "6", Version("6.1.0"), False),
("windows", "desktop", "android_x86", "6", Version("6.1.0"), False), # does not validate arch
("windows", "desktop", "android_fake", "6", Version("6.1.0"), False), # does not validate arch
("windows", "desktop", "android_x86", "6", Version("6.5.0"), False), # does not validate arch
("windows", "desktop", "android_fake", "6", Version("6.5.0"), False), # does not validate arch
),
)
def test_cli_determine_qt_version(
@@ -204,7 +216,6 @@ def test_cli_check_mirror():
),
)
def test_set_arch(arch: Optional[str], host: str, target: str, version: str, expect: Optional[str]):
if not expect:
with pytest.raises(CliInputError) as e:
Cli._set_arch(arch, host, target, version)
@@ -303,6 +314,34 @@ def test_cli_legacy_tool_new_syntax(monkeypatch, capsys, cmd):
assert actual == expected
@pytest.mark.parametrize(
"cmd, expect_err",
(
(
"list-qt mac --extension wasm",
"WARNING : The parameter 'extension' with value 'wasm' is deprecated "
"and marked for removal in a future version of aqt.\n"
"In the future, please omit this parameter.\n"
"WARNING : The '--extension' flag will be ignored.\n",
),
(
"list-qt mac desktop --extensions 6.2.0",
"WARNING : The parameter 'extensions' with value '6.2.0' is deprecated "
"and marked for removal in a future version of aqt.\n"
"In the future, please omit this parameter.\n"
"WARNING : The '--extensions' flag will always return an empty list, "
"because there are no useful arguments for the '--extension' flag.\n",
),
),
)
def test_cli_list_qt_deprecated_flags(capsys, cmd: str, expect_err: str):
cli = Cli()
cli._setup_settings()
assert 0 == cli.run(cmd.split())
out, err = capsys.readouterr()
assert err == expect_err
# These commands come directly from examples in the legacy documentation
@pytest.mark.parametrize(
"cmd",
@@ -339,18 +378,68 @@ def test_cli_unexpected_error(monkeypatch, capsys):
assert err.rstrip().endswith(
"===========================PLEASE FILE A BUG REPORT===========================\n"
"You have discovered a bug in aqt.\n"
"Please file a bug report at https://github.com/miurahr/aqtinstall/issues.\n"
"Please file a bug report at https://github.com/miurahr/aqtinstall/issues\n"
"Please remember to include a copy of this program's output in your report."
)
def test_cli_set_7zip(monkeypatch):
@pytest.mark.parametrize("external_tool_exists", (True, False))
def test_set_7zip_checks_external_tool_when_specified(monkeypatch, capsys, external_tool_exists: bool):
cli = Cli()
cli._setup_settings()
with pytest.raises(CliInputError) as err:
cli._set_sevenzip("some_nonexistent_binary")
assert err.type == CliInputError
assert format(err.value) == "Specified 7zip command executable does not exist: 'some_nonexistent_binary'"
external = "my_7z_extractor"
def mock_subprocess_run(args, **kwargs):
assert args[0] == external
if not external_tool_exists:
raise FileNotFoundError()
monkeypatch.setattr("aqt.installer.subprocess.run", mock_subprocess_run)
monkeypatch.setattr("aqt.installer.EXT7Z", False)
if external_tool_exists:
assert external == cli._set_sevenzip(external)
else:
with pytest.raises(CliInputError) as err:
cli._set_sevenzip(external)
assert format(err.value) == format(f"Specified 7zip command executable does not exist: '{external}'")
assert capsys.readouterr()[1] == ""
@pytest.mark.parametrize("fallback_exists", (True, False))
def test_set_7zip_uses_fallback_when_py7zr_missing(monkeypatch, capsys, fallback_exists: bool):
cli = Cli()
cli._setup_settings()
external, fallback = None, Settings.zipcmd
def mock_subprocess_run(args, **kwargs):
assert args[0] == fallback
if not fallback_exists:
raise FileNotFoundError()
monkeypatch.setattr("aqt.installer.subprocess.run", mock_subprocess_run)
monkeypatch.setattr("aqt.installer.EXT7Z", True)
if fallback_exists:
assert fallback == cli._set_sevenzip(external)
else:
with pytest.raises(CliInputError) as err:
cli._set_sevenzip(external)
assert format(err.value) == format(f"Fallback 7zip command executable does not exist: '{fallback}'")
assert f"Falling back to '{fallback}'" in capsys.readouterr()[1]
@pytest.mark.parametrize("fallback_exists", (True, False))
def test_set_7zip_chooses_p7zr_when_ext_missing(monkeypatch, capsys, fallback_exists: bool):
cli = Cli()
cli._setup_settings()
external = None
def mock_subprocess_run(args, **kwargs):
assert False, "Should not try to run anything"
monkeypatch.setattr("aqt.installer.subprocess.run", mock_subprocess_run)
monkeypatch.setattr("aqt.installer.EXT7Z", False)
assert cli._set_sevenzip(external) is None
assert capsys.readouterr()[1] == ""
@pytest.mark.parametrize(
@@ -374,3 +463,175 @@ def test_cli_choose_archive_dest(
assert Cli.choose_archive_dest(archive_dest, keep, temp_dir) == Path(expect)
assert enclosed["made_dir"] == should_make_dir
@pytest.mark.parametrize(
"host, target, arch, is_auto, mocked_arches, existing_arch_dirs, expect",
(
( # not installed
"windows",
"android",
"android_armv7",
False,
["win64_mingw99"],
["not_mingw"],
{"install": None, "instruct": "win64_mingw99", "use_dir": "mingw99_64"},
),
( # Alt Desktop Qt already installed
"windows",
"android",
"android_armv7",
False,
["win64_mingw99"],
["mingw128_32"],
{"install": None, "instruct": None, "use_dir": "mingw128_32"},
),
# not installed
(
"linux",
"android",
"android_armv7",
False,
[],
["gcc_32"],
{"install": None, "instruct": "gcc_64", "use_dir": "gcc_64"},
),
( # Desktop Qt already installed
"linux",
"android",
"android_armv7",
False,
[],
["gcc_64"],
{"install": None, "instruct": None, "use_dir": "gcc_64"},
),
( # not installed
"windows",
"android",
"android_armv7",
True,
["win64_mingw99"],
["not_mingw"],
{"install": "win64_mingw99", "instruct": None, "use_dir": "mingw99_64"},
),
( # Alt Desktop Qt already installed
"windows",
"android",
"android_armv7",
True,
["win64_mingw99"],
["mingw128_32"],
{"install": None, "instruct": None, "use_dir": "mingw128_32"},
),
# not installed
(
"linux",
"android",
"android_armv7",
True,
[],
["gcc_32"],
{"install": "gcc_64", "instruct": None, "use_dir": "gcc_64"},
),
( # Desktop Qt already installed
"linux",
"android",
"android_armv7",
True,
[],
["gcc_64"],
{"install": None, "instruct": None, "use_dir": "gcc_64"},
),
( # MSVC arm64 with --autodesktop: should install min64_msvc2019_64
"windows",
"desktop",
"win64_msvc2019_arm64",
True,
["win64_mingw", "win64_msvc2019_64", "win64_msvc2019_arm64", "wasm_singlethread", "wasm_multithread"],
["mingw128_32"],
{"install": "win64_msvc2019_64", "instruct": None, "use_dir": "msvc2019_64"},
),
( # MSVC arm64 without --autodesktop: should point to min64_msvc2019_64
"windows",
"desktop",
"win64_msvc2019_arm64",
False,
["win64_mingw", "win64_msvc2019_64", "win64_msvc2019_arm64", "wasm_singlethread", "wasm_multithread"],
["mingw128_32"],
{"install": None, "instruct": "win64_msvc2019_64", "use_dir": "msvc2019_64"},
),
( # MSVC arm64 without --autodesktop, with correct target already installed
"windows",
"desktop",
"win64_msvc2019_arm64",
False,
["win64_mingw", "win64_msvc2019_64", "win64_msvc2019_arm64", "wasm_singlethread", "wasm_multithread"],
["msvc2019_64"],
{"install": None, "instruct": None, "use_dir": "msvc2019_64"},
),
( # MSVC arm64 without --autodesktop, with wrong target already installed
"windows",
"desktop",
"win64_msvc2019_arm64",
False,
["win64_mingw", "win64_msvc2019_64", "win64_msvc2019_arm64", "wasm_singlethread", "wasm_multithread"],
["mingw128_32"],
{"install": None, "instruct": "win64_msvc2019_64", "use_dir": "msvc2019_64"},
),
),
)
def test_get_autodesktop_dir_and_arch_non_android(
monkeypatch,
capsys,
host: str,
target: str,
arch: str,
is_auto: bool,
mocked_arches: List[str],
existing_arch_dirs: List[str],
expect: Dict[str, str],
):
"""
:is_auto: Simulates passing `--autodesktop` to aqt
:mocked_mingw: When we ask MetadataFactory for a list of available architectures, we return this value
:existing_arch_dirs: Directories that contain an existing file at `arch_dir/bin/qmake`
:expect[install]: The archdir we expect aqt to install
:expect[instruct]: The architecture we expect aqt to ask the user to install
:expect[use_dir]: The directory that includes `bin/qmake`; we will patch files in the mobile installation
with this value
"""
monkeypatch.setattr(MetadataFactory, "fetch_arches", lambda *args: mocked_arches)
monkeypatch.setattr(Cli, "run", lambda *args: 0)
version = "6.2.3"
cli = Cli()
cli._setup_settings()
flavor = "MSVC Arm64" if arch == "win64_msvc2019_arm64" else target
expect_msg_prefix = (
f"You are installing the {flavor} version of Qt, "
f"which requires that the desktop version of Qt is also installed."
)
with TemporaryDirectory() as temp_dir:
base_dir = Path(temp_dir)
for arch_dir in existing_arch_dirs:
qmake = base_dir / version / arch_dir / f"bin/qmake{'.exe' if host == 'windows' else ''}"
qmake.parent.mkdir(parents=True)
qmake.write_text("exe file")
autodesktop_arch_dir, autodesktop_arch_to_install = cli._get_autodesktop_dir_and_arch(
is_auto, host, target, base_dir, Version(version), arch
)
# It should choose the correct desktop arch directory for updates
assert autodesktop_arch_dir == expect["use_dir"]
out, err = capsys.readouterr()
if expect["install"]:
assert err.strip() == f"INFO : {expect_msg_prefix} Now installing Qt: desktop {version} {expect['install']}"
elif expect["instruct"]:
assert (
err.strip() == f"WARNING : {expect_msg_prefix} You can install it with the following command:\n"
f" `aqt install-qt {host} desktop {version} {expect['instruct']}`"
)
else:
assert err.strip() == f"INFO : Found installed {host}-desktop Qt at {base_dir / version / expect['use_dir']}"

View File

@@ -37,7 +37,7 @@ def test_cli_unknown_version(capsys):
"""
matcher = re.compile(
r"^aqtinstall\(aqt\) v.* on Python 3.*\n"
r"[^\n]*aqtinstall\(aqt\) v.* on Python 3.*\n"
r".*Specified Qt version is unknown: " + re.escape(wrong_version) + r"\.\n"
r".*Failed to locate XML data for Qt version '" + re.escape(wrong_version) + r"'\.\n"
r"==============================Suggested follow-up:==============================\n"

View File

@@ -63,6 +63,46 @@ def test_helper_altlink(monkeypatch):
assert newurl.startswith("http://ftp.jaist.ac.jp/")
def test_helper_altlink_black(monkeypatch):
class Message:
headers = {"content-type": "text/plain", "length": 300}
text = """<?xml version="1.0" encoding="UTF-8"?>
<metalink xmlns="urn:ietf:params:xml:ns:metalink">
<generator>MirrorBrain/2.17.0</generator>
<origin dynamic="true">http://download.example.io/boo.7z.meta4</origin>
<published>2020-03-04T01:11:48Z</published>
<publisher>
<name>Example Project</name>
<url>https://download.example.io</url>
</publisher>
<file name="boo.7z">
<size>651</size>
<hash type="md5">d49eba3937fb063caa48769e8f28377c</hash>
<hash type="sha-1">25d3a33d00c1e5880679a17fd4b8b831134cfa6f</hash>
<hash type="sha-256">37e50248cf061109e2cb92105cd2c36a6e271701d6d4a72c4e73c6d82aad790a</hash>
<pieces length="262144" type="sha-1">
<hash>bec628a149ed24a3a9b83747776ecca5a1fad11c</hash>
<hash>98b1dee3f741de51167a9428b0560cd2d1f4d945</hash>
<hash>8717a0cb3d14c1958de5981635c9b90b146da165</hash>
<hash>78cd2ae3ae37ca7c080a56a2b34eb33ec44a9ef1</hash>
</pieces>
<url location="cn" priority="1">http://mirrors.geekpie.club/boo.7z</url>
</file>
</metalink>
"""
def mock_return(url):
return Message()
monkeypatch.setattr(helper, "_get_meta", mock_return)
url = "http://foo.baz/qtproject/boo.7z"
alt = "http://ftp.yz.yamagata-u.ac.jp/pub/boo.7z"
newurl = helper.altlink(url, alt)
assert newurl.startswith("http://ftp.yz.yamagata-u.ac.jp/pub/boo.7z")
@pytest.mark.load_default_settings(False)
def test_settings(tmp_path):
helper.Settings.load_settings(os.path.join(os.path.dirname(__file__), "data", "settings.ini"))
@@ -87,7 +127,6 @@ def mocked_requests_get(*args, **kwargs):
def test_helper_downloadBinary_md5(tmp_path, monkeypatch):
monkeypatch.setattr(requests.Session, "get", mocked_requests_get)
expected = binascii.unhexlify("1d41a93e4a585bb01e4518d4af431933")
@@ -96,7 +135,6 @@ def test_helper_downloadBinary_md5(tmp_path, monkeypatch):
def test_helper_downloadBinary_sha256(tmp_path, monkeypatch):
monkeypatch.setattr(requests.Session, "get", mocked_requests_get)
expected = binascii.unhexlify("07b3ef4606b712923a14816b1cfe9649687e617d030fc50f948920d784c0b1cd")

File diff suppressed because it is too large Load Diff

View File

@@ -5,7 +5,8 @@ import re
import shutil
import sys
from pathlib import Path
from typing import Dict, List, Set, Union
from tempfile import TemporaryDirectory
from typing import Dict, List, Optional, Set, Union
from urllib.parse import urlparse
import pytest
@@ -32,6 +33,8 @@ from aqt.metadata import (
suggested_follow_up,
)
ModulesQuery = MetadataFactory.ModulesQuery
Settings.load_settings()
@@ -144,42 +147,33 @@ def test_list_versions_tools(monkeypatch, spec_regex, os_name, target, in_file,
tools = MetadataFactory(ArchiveId("tools", os_name, target)).getList()
assert tools == expected["tools"]
for ext, expected_output in expected["qt"].items():
# Test 'aqt list-qt'
archive_id = ArchiveId("qt", os_name, target, ext if ext != "qt" else "")
all_versions = MetadataFactory(archive_id).getList()
# Test 'aqt list-qt'
expected_output = expected["qt"]["qt"]
archive_id = ArchiveId("qt", os_name, target)
all_versions = MetadataFactory(archive_id).getList()
assert f"{all_versions}" == "\n".join(expected_output)
if len(expected_output) == 0:
assert not all_versions
else:
assert f"{all_versions}" == "\n".join(expected_output)
# Filter for the latest version only
latest_ver = MetadataFactory(archive_id, is_latest_version=True).getList()
assert f"{latest_ver}" == expected_output[-1].split(" ")[-1]
# Filter for the latest version only
latest_ver = MetadataFactory(archive_id, is_latest_version=True).getList()
for row in expected_output:
spec = SimpleSpec(spec_regex.search(row).group(1))
if len(expected_output) == 0:
assert not latest_ver
else:
assert f"{latest_ver}" == expected_output[-1].split(" ")[-1]
# Find the latest version for a particular spec
latest_ver_for_spec = MetadataFactory(
archive_id,
spec=spec,
is_latest_version=True,
).getList()
assert f"{latest_ver_for_spec}" == row.split(" ")[-1]
for row in expected_output:
spec_str = spec_regex.search(row).group(1)
spec = SimpleSpec(spec_str) if not ext.endswith("preview") else SimpleSpec(spec_str + ".0-preview")
# Find the latest version for a particular spec
latest_ver_for_spec = MetadataFactory(
archive_id,
spec=spec,
is_latest_version=True,
).getList()
assert f"{latest_ver_for_spec}" == row.split(" ")[-1]
# Find all versions for a particular spec
all_ver_for_spec = MetadataFactory(
archive_id,
spec=spec,
).getList()
assert f"{all_ver_for_spec}" == row
# Find all versions for a particular spec
all_ver_for_spec = MetadataFactory(
archive_id,
spec=spec,
).getList()
assert f"{all_ver_for_spec}" == row
@pytest.mark.parametrize(
@@ -196,8 +190,8 @@ def test_list_versions_tools(monkeypatch, spec_regex, os_name, target, in_file,
("6.2.0", "", "windows-620-update.xml", "windows-620-expect.json"),
],
)
def test_list_architectures_and_modules(monkeypatch, version: str, extension: str, in_file: str, expect_out_file: str):
archive_id = ArchiveId("qt", "windows", "desktop", extension)
def test_list_qt_modules(monkeypatch, version: str, extension: str, in_file: str, expect_out_file: str):
archive_id = ArchiveId("qt", "windows", "desktop")
_xml = (Path(__file__).parent / "data" / in_file).read_text("utf-8")
expect = json.loads((Path(__file__).parent / "data" / expect_out_file).read_text("utf-8"))
@@ -207,9 +201,6 @@ def test_list_architectures_and_modules(monkeypatch, version: str, extension: st
modules = MetadataFactory(archive_id).fetch_modules(Version(version), arch)
assert modules == sorted(expect["modules_by_arch"][arch])
arches = MetadataFactory(archive_id).fetch_arches(Version(version))
assert arches == expect["architectures"]
@pytest.fixture
def win_5152_sde_xml_file() -> str:
@@ -240,7 +231,7 @@ def test_list_src_doc_examples_archives(
):
monkeypatch.setattr(MetadataFactory, "fetch_http", lambda self, _: win_5152_sde_xml_file)
archive_id = ArchiveId("qt", host, "desktop", "src_doc_examples")
archive_id = ArchiveId("qt", host, "desktop")
archives = set(MetadataFactory(archive_id).fetch_archives_sde(cmd_type, Version(version)))
assert archives == expected
@@ -262,7 +253,7 @@ def test_list_src_doc_examples_modules(
):
monkeypatch.setattr(MetadataFactory, "fetch_http", lambda self, _: win_5152_sde_xml_file)
archive_id = ArchiveId("qt", host, "desktop", "src_doc_examples")
archive_id = ArchiveId("qt", host, "desktop")
modules = set(MetadataFactory(archive_id).fetch_modules_sde(cmd_type, Version(version)))
assert modules == expected
@@ -278,7 +269,11 @@ def test_list_src_doc_examples_modules(
),
)
def test_list_src_doc_examples_cli(monkeypatch, capsys, win_5152_sde_xml_file, command: str, expected: Set[str]):
monkeypatch.setattr(MetadataFactory, "fetch_http", lambda self, _: win_5152_sde_xml_file)
def mock_fetch(self, rest_of_url):
assert rest_of_url == "online/qtsdkrepository/windows_x86/desktop/qt5_5152_src_doc_examples/Updates.xml"
return win_5152_sde_xml_file
monkeypatch.setattr(MetadataFactory, "fetch_http", mock_fetch)
cli = Cli()
assert 0 == cli.run(command.split())
@@ -315,7 +310,7 @@ def test_list_archives(
else:
expected_mod_metadata = expect["modules_metadata_by_arch"][arch]
if "all" not in modules_to_query:
expected_mod_metadata = filter(lambda mod: mod["Name"].split(".")[-2] in modules_to_query, expected_mod_metadata)
expected_mod_metadata = [mod for mod in expected_mod_metadata if mod["Name"].split(".")[-2] in modules_to_query]
expected = set([arc.split("-")[0] for mod in expected_mod_metadata for arc in mod["DownloadableArchives"]])
archives_query = [version, arch, *modules_to_query]
@@ -349,19 +344,22 @@ def test_list_archives_insufficient_args(capsys):
assert err.strip() == "ERROR : The '--archives' flag requires a 'QT_VERSION' and an 'ARCHITECTURE' parameter."
def test_list_archives_bad_xml(monkeypatch):
@pytest.mark.parametrize(
"xml_content",
(
"<Updates><PackageUpdate><badname></badname></PackageUpdate></Updates>",
"<Updates><PackageUpdate><Name></Name></PackageUpdate></Updates>",
"<Updates></PackageUpdate><PackageUpdate></Updates><Name></Name>",
),
)
def test_list_archives_bad_xml(monkeypatch, xml_content: str):
archive_id = ArchiveId("qt", "windows", "desktop")
archives_query = ["5.15.2", "win32_mingw81", "qtcharts"]
xml_no_name = "<Updates><PackageUpdate><badname></badname></PackageUpdate></Updates>"
xml_empty_name = "<Updates><PackageUpdate><Name></Name></PackageUpdate></Updates>"
xml_broken = "<Updates></PackageUpdate><PackageUpdate></Updates><Name></Name>"
for _xml in (xml_no_name, xml_empty_name, xml_broken):
monkeypatch.setattr(MetadataFactory, "fetch_http", lambda self, _: _xml)
with pytest.raises(ArchiveListError) as e:
MetadataFactory(archive_id, archives_query=archives_query).getList()
assert e.type == ArchiveListError
monkeypatch.setattr(MetadataFactory, "fetch_http", lambda self, _: xml_content)
with pytest.raises(ArchiveListError) as e:
MetadataFactory(archive_id, archives_query=archives_query).getList()
assert e.type == ArchiveListError
@pytest.mark.parametrize(
@@ -404,52 +402,54 @@ def test_long_qt_modules(monkeypatch, host: str, target: str, version: str, arch
monkeypatch.setattr(MetadataFactory, "fetch_http", lambda self, _: _xml)
table = MetadataFactory(archive_id, modules_query=(version, arch), is_long_listing=True).getList()
table = MetadataFactory(archive_id, modules_query=ModulesQuery(version, arch), is_long_listing=True).getList()
assert table._rows(table.long_heading_keys) == expect["modules_long_by_arch"][arch]
@pytest.fixture
def expected_windows_desktop_5140() -> Dict:
xmlexpect = "windows-5140-expect.json"
return json.loads((Path(__file__).parent / "data" / xmlexpect).read_text("utf-8"))
def expected_windows_desktop_plus_wasm_5140(is_wasm_threaded: bool) -> Dict:
if is_wasm_threaded:
input_filenames = (
"windows-5140-expect.json",
"windows-650-wasm-single-expect.json",
"windows-650-wasm-multi-expect.json",
)
else:
input_filenames = "windows-5140-expect.json", "windows-5140-wasm-expect.json"
to_join = [json.loads((Path(__file__).parent / "data" / f).read_text("utf-8")) for f in input_filenames]
return {
"architectures": [arch for _dict in to_join for arch in _dict["architectures"]],
"modules_by_arch": {k: v for _dict in to_join for k, v in _dict["modules_by_arch"].items()},
}
@pytest.mark.parametrize(
"args, expect",
"args, is_wasm_threaded, expect",
(
("--extensions latest", {"src_doc_examples"}),
("--spec 5.14 --extensions latest", {"wasm", "src_doc_examples"}),
("--extensions 5.14.0", {"wasm", "src_doc_examples"}),
("--modules latest win64_msvc2017_64", ["modules_by_arch", "win64_msvc2017_64"]),
("--spec 5.14 --modules latest win64_msvc2017_64", ["modules_by_arch", "win64_msvc2017_64"]),
("--modules 5.14.0 win32_mingw73", ["modules_by_arch", "win32_mingw73"]),
("--modules 5.14.0 win32_msvc2017", ["modules_by_arch", "win32_msvc2017"]),
("--modules 5.14.0 win64_mingw73", ["modules_by_arch", "win64_mingw73"]),
("--modules 5.14.0 win64_msvc2015_64", ["modules_by_arch", "win64_msvc2015_64"]),
("--modules 5.14.0 win64_msvc2017_64", ["modules_by_arch", "win64_msvc2017_64"]),
("--extension wasm --modules latest win64_msvc2017_64", ["modules_by_arch", "win64_msvc2017_64"]),
("--extension wasm --spec 5.14 --modules latest win64_msvc2017_64", ["modules_by_arch", "win64_msvc2017_64"]),
("--extension wasm --modules 5.14.0 win64_msvc2017_64", ["modules_by_arch", "win64_msvc2017_64"]),
("--arch latest", ["architectures"]),
("--spec 5.14 --arch latest", ["architectures"]),
("--arch 5.14.0", ["architectures"]),
("--extension wasm --arch latest", ["architectures"]),
("--extension wasm --spec 5.14 --arch latest", ["architectures"]),
("--extension wasm --arch 5.14.0", ["architectures"]),
("--modules latest win64_msvc2017_64", False, ["modules_by_arch", "win64_msvc2017_64"]),
("--spec 5.14 --modules latest win64_msvc2017_64", False, ["modules_by_arch", "win64_msvc2017_64"]),
("--modules 5.14.0 win32_mingw73", False, ["modules_by_arch", "win32_mingw73"]),
("--modules 5.14.0 win32_msvc2017", False, ["modules_by_arch", "win32_msvc2017"]),
("--modules 5.14.0 win64_mingw73", False, ["modules_by_arch", "win64_mingw73"]),
("--modules 5.14.0 win64_msvc2015_64", False, ["modules_by_arch", "win64_msvc2015_64"]),
("--modules 5.14.0 win64_msvc2017_64", False, ["modules_by_arch", "win64_msvc2017_64"]),
("--modules 6.5.0 wasm_singlethread", True, ["modules_by_arch", "wasm_singlethread"]),
("--modules 6.5.0 wasm_multithread", True, ["modules_by_arch", "wasm_multithread"]),
("--arch latest", True, ["architectures"]),
("--spec 5.14 --arch latest", False, ["architectures"]),
("--arch 5.14.0", False, ["architectures"]),
),
)
def test_list_qt_cli(
monkeypatch,
capsys,
expected_windows_desktop_5140: Dict[str, Set[str]],
args: str,
is_wasm_threaded: bool,
expect: Union[Set[str], List[str]],
):
htmlfile, xmlfile = "windows-desktop.html", "windows-5140-update.xml"
version_string_to_replace = "qt5.5140"
if isinstance(expect, list):
# In this case, 'expect' is a list of keys to follow to the expected values.
expected_dict = expected_windows_desktop_5140
expected_dict = expected_windows_desktop_plus_wasm_5140(is_wasm_threaded)
for key in expect: # Follow the chain of keys to the list of values.
expected_dict = expected_dict[key]
assert isinstance(expected_dict, list)
@@ -459,11 +459,21 @@ def test_list_qt_cli(
assert isinstance(expect_set, set)
def _mock_fetch_http(_, rest_of_url, *args, **kwargs: str) -> str:
htmltext = (Path(__file__).parent / "data" / htmlfile).read_text("utf-8")
htmltext = (Path(__file__).parent / "data" / "windows-desktop.html").read_text("utf-8")
if not rest_of_url.endswith("Updates.xml"):
return htmltext
xmltext = (Path(__file__).parent / "data" / xmlfile).read_text("utf-8")
def get_xml_filename() -> str:
if rest_of_url.endswith("_wasm/Updates.xml"):
return "windows-5140-wasm-update.xml"
elif rest_of_url.endswith("_wasm_singlethread/Updates.xml"):
return "windows-650-wasm-single-update.xml"
elif rest_of_url.endswith("_wasm_multithread/Updates.xml"):
return "windows-650-wasm-multi-update.xml"
else:
return "windows-5140-update.xml"
xmltext = (Path(__file__).parent / "data" / get_xml_filename()).read_text("utf-8")
# If we are serving an Updates.xml, `aqt list` will look for a Qt version number.
# We will replace the version numbers in the file with the requested version.
match = re.search(r"qt(\d)_(\d+)", rest_of_url)
@@ -481,6 +491,93 @@ def test_list_qt_cli(
assert output_set == expect_set
def test_list_missing_wasm_updates(monkeypatch, capsys):
"""Require that MetadataFactory is resilient to missing wasm updates.xml files"""
data_dir = Path(__file__).parent / "data"
expect = set(json.loads((data_dir / "windows-620-expect.json").read_text("utf-8"))["architectures"])
def _mock_fetch_http(_, rest_of_url, *args, **kwargs: str) -> str:
htmltext = (Path(__file__).parent / "data" / "windows-desktop.html").read_text("utf-8")
if rest_of_url.endswith("windows_x86/desktop/"):
return htmltext
elif rest_of_url.endswith("windows_x86/desktop/qt6_620/Updates.xml"):
return (data_dir / "windows-620-update.xml").read_text("utf-8")
else:
raise ArchiveDownloadError(f"No such file at {rest_of_url}")
monkeypatch.setattr(MetadataFactory, "fetch_http", _mock_fetch_http)
cli = Cli()
rv = cli.run("list-qt windows desktop --arch 6.2.0".split())
assert rv == 0
out, err = capsys.readouterr()
assert set(out.strip().split()) == expect
@pytest.mark.parametrize(
"qt_ver_str, expect_set", (("6.2.0", {"android_x86", "android_x86_64", "android_armv7", "android_arm64_v8a"}),)
)
def test_list_android_arches(monkeypatch, capsys, qt_ver_str: str, expect_set: Set[str]):
host, target = "windows", "android"
def _mock_fetch_http(_, rest_of_url, *args, **kwargs: str) -> str:
assert rest_of_url.endswith("Updates.xml"), f"Fetched unexpected file at {rest_of_url}"
xmltext = (Path(__file__).parent / "data" / "windows-620-android-armv7-update.xml").read_text("utf-8")
# If we are serving an Updates.xml, `aqt list` will look for a Qt version number.
# We will replace the version numbers in the file with the requested version.
match = re.search(r"qt\d_\d+_(?P<arch>\w+)/Updates\.xml$", rest_of_url)
assert match
return xmltext.replace("armv7", match.group("arch"))
monkeypatch.setattr(MetadataFactory, "fetch_http", _mock_fetch_http)
# Unit test:
archive_id = ArchiveId("qt", host, target)
actual_arches = MetadataFactory(archive_id).fetch_arches(Version(qt_ver_str))
assert set(actual_arches) == expect_set
# Integration test:
cli = Cli()
cli.run(["list-qt", host, target, "--arch", qt_ver_str])
out, err = capsys.readouterr()
output_set = set(out.strip().split())
assert output_set == expect_set
@pytest.mark.parametrize(
"host, has_wasm",
(("linux", True), ("windows", False), ("mac", False)),
)
def test_list_desktop_arches_qt5130(monkeypatch, capsys, host: str, has_wasm: bool):
"""Tests the edge case of desktop Qt 5.13.0, in which "wasm_32" is a valid arch for Linux but not win/mac."""
# Generate some mock Updates.xml files. The host mismatch is not important; we just want to check for arch==wasm
updates_xmltext, wasm_updates_xmltext = [
(Path(__file__).parent / "data" / filename).read_text("utf-8").replace("qt5.5140", "qt5.5130")
for filename in ("windows-5140-update.xml", "windows-5140-wasm-update.xml")
]
def _mock_fetch_http(_, rest_of_url, *args, **kwargs: str) -> str:
if rest_of_url == "online/qtsdkrepository/linux_x64/desktop/qt5_5130_wasm/Updates.xml":
return wasm_updates_xmltext
elif rest_of_url.endswith("/desktop/qt5_5130/Updates.xml"):
return updates_xmltext
else:
assert False, f"Fetched an unexpected file at '{rest_of_url}'"
monkeypatch.setattr(MetadataFactory, "fetch_http", _mock_fetch_http)
cli = Cli()
cli.run(["list-qt", host, "desktop", "--arch", "5.13.0"])
out, err = capsys.readouterr()
output_set = set(out.strip().split())
if has_wasm:
assert "wasm_32" in output_set
else:
assert "wasm_32" not in output_set
@pytest.mark.parametrize(
"cmd, host, expect",
(
@@ -568,45 +665,9 @@ def test_list_choose_tool_by_version(simple_spec, expected_name):
assert expected_name is None
qt6_android_requires_ext_msg = (
"Qt 6 for Android requires one of the following extensions: "
f"{ArchiveId.EXTENSIONS_REQUIRED_ANDROID_QT6}. "
"Please add your extension using the `--extension` flag."
)
no_arm64_v8_msg = "The extension 'arm64_v8a' is only valid for Qt 6 for Android"
no_wasm_msg = "The extension 'wasm' is only available in Qt 5.13-5.15 and 6.2+ on desktop."
@pytest.mark.parametrize(
"target, ext, version, expected_msg",
(
("android", "", "6.2.0", qt6_android_requires_ext_msg),
("android", "arm64_v8a", "5.13.0", no_arm64_v8_msg),
("desktop", "arm64_v8a", "5.13.0", no_arm64_v8_msg),
("desktop", "arm64_v8a", "6.2.0", no_arm64_v8_msg),
("desktop", "wasm", "5.12.11", no_wasm_msg), # out of range
("desktop", "wasm", "6.1.9", no_wasm_msg), # out of range
("android", "wasm", "5.12.11", no_wasm_msg), # in range, wrong target
("android", "wasm", "5.14.0", no_wasm_msg), # in range, wrong target
("android", "wasm", "6.1.9", qt6_android_requires_ext_msg),
),
)
def test_list_invalid_extensions(capsys, monkeypatch, target, ext, version, expected_msg):
host = "windows"
extension_params = ["--extension", ext] if ext else []
cli = Cli()
cli.run(["list-qt", host, target, *extension_params, "--arch", version])
out, err = capsys.readouterr()
sys.stdout.write(out)
sys.stderr.write(err)
assert expected_msg in err
mac_qt = ArchiveId("qt", "mac", "desktop")
mac_wasm = ArchiveId("qt", "mac", "desktop", "wasm")
wrong_tool_name_msg = "Please use 'aqt list-tool mac desktop' to check what tools are available."
wrong_qt_version_msg = "Please use 'aqt list-qt mac desktop' to show versions of Qt available."
wrong_ext_msg = "Please use 'aqt list-qt mac desktop --extensions <QT_VERSION>' to list valid extensions."
wrong_arch_msg = "Please use 'aqt list-qt mac desktop --arch <QT_VERSION>' to list valid architectures."
@@ -627,13 +688,9 @@ wrong_arch_msg = "Please use 'aqt list-qt mac desktop --arch <QT_VERSION>' to li
[wrong_qt_version_msg],
),
(
MetadataFactory(mac_qt, modules_query=("1.2.3", "clang_64")),
MetadataFactory(mac_qt, modules_query=ModulesQuery("1.2.3", "clang_64")),
[wrong_qt_version_msg, wrong_arch_msg],
),
(
MetadataFactory(mac_qt, extensions_ver="1.2.3"),
[wrong_qt_version_msg],
),
(
MetadataFactory(mac_qt, archives_query=["1.2.3", "clang_64", "a module", "another module"]),
[
@@ -650,34 +707,20 @@ wrong_arch_msg = "Please use 'aqt list-qt mac desktop --arch <QT_VERSION>' to li
],
),
(
MetadataFactory(mac_wasm),
[wrong_ext_msg],
MetadataFactory(mac_qt, spec=SimpleSpec("<5.9")),
["Please use 'aqt list-qt mac desktop' to check that versions of qt exist within the spec '<5.9'."],
),
(
MetadataFactory(mac_wasm, spec=SimpleSpec("<5.9")),
[
wrong_ext_msg,
"Please use 'aqt list-qt mac desktop' to check that versions of qt exist within the spec '<5.9'.",
],
MetadataFactory(ArchiveId("tools", "mac", "desktop"), tool_name="ifw"),
[wrong_tool_name_msg],
),
(
MetadataFactory(ArchiveId("tools", "mac", "desktop", "wasm"), tool_name="ifw"),
[
"Please use 'aqt list-tool mac desktop --extensions <QT_VERSION>' to list valid extensions.",
wrong_tool_name_msg,
],
MetadataFactory(mac_qt, architectures_ver="1.2.3"),
[wrong_qt_version_msg],
),
(
MetadataFactory(mac_wasm, architectures_ver="1.2.3"),
[wrong_ext_msg, wrong_qt_version_msg],
),
(
MetadataFactory(mac_wasm, modules_query=("1.2.3", "clang_64")),
[wrong_ext_msg, wrong_qt_version_msg, wrong_arch_msg],
),
(
MetadataFactory(mac_wasm, extensions_ver="1.2.3"),
[wrong_ext_msg, wrong_qt_version_msg],
MetadataFactory(mac_qt, modules_query=ModulesQuery("1.2.3", "clang_64")),
[wrong_qt_version_msg, wrong_arch_msg],
),
),
)
@@ -687,12 +730,12 @@ def test_suggested_follow_up(meta: MetadataFactory, expected_message: str):
def test_format_suggested_follow_up():
suggestions = [
"Please use 'aqt list-tool mac desktop --extensions <QT_VERSION>' to list valid extensions.",
"Please use 'aqt list-tool mac desktop --modules <QT_VERSION>' to list valid modules.",
"Please use 'aqt list-tool mac desktop' to check what tools are available.",
]
expected = (
"==============================Suggested follow-up:==============================\n"
"* Please use 'aqt list-tool mac desktop --extensions <QT_VERSION>' to list valid extensions.\n"
"* Please use 'aqt list-tool mac desktop --modules <QT_VERSION>' to list valid modules.\n"
"* Please use 'aqt list-tool mac desktop' to check what tools are available."
)
ex = AqtException("msg", suggested_action=suggestions)
@@ -712,13 +755,13 @@ def test_format_suggested_follow_up_empty():
"qt/mac/desktop with spec 5.42",
),
(
MetadataFactory(ArchiveId("qt", "mac", "desktop", "wasm"), spec=SimpleSpec("5.42")),
"qt/mac/desktop/wasm with spec 5.42",
MetadataFactory(ArchiveId("qt", "mac", "desktop"), spec=SimpleSpec("5.42")),
"qt/mac/desktop with spec 5.42",
),
(MetadataFactory(ArchiveId("qt", "mac", "desktop")), "qt/mac/desktop"),
(
MetadataFactory(ArchiveId("qt", "mac", "desktop", "wasm")),
"qt/mac/desktop/wasm",
MetadataFactory(ArchiveId("qt", "mac", "desktop")),
"qt/mac/desktop",
),
),
)
@@ -727,35 +770,38 @@ def test_list_describe_filters(meta: MetadataFactory, expect: str):
@pytest.mark.parametrize(
"archive_id, spec, version_str, expect",
"archive_id, spec, version_str, arch, expect",
(
(mac_qt, None, "5.12.42", Version("5.12.42")),
(mac_qt, None, "5.12.42", None, Version("5.12.42")),
(
mac_qt,
None,
"not a version",
None,
CliInputError("Invalid version string: 'not a version'"),
),
(mac_qt, SimpleSpec("5"), "latest", Version("5.15.2")),
(mac_qt, SimpleSpec("5"), "latest", None, Version("5.15.2")),
(
mac_qt,
SimpleSpec("5.0"),
"latest",
None,
CliInputError("There is no latest version of Qt with the criteria 'qt/mac/desktop with spec 5.0'"),
),
(mac_qt, SimpleSpec("<6.2.0"), "latest", "wasm_32", Version("5.15.2")),
),
)
def test_list_to_version(monkeypatch, archive_id, spec, version_str, expect):
def test_list_to_version(monkeypatch, archive_id, spec, version_str, arch: Optional[str], expect):
_html = (Path(__file__).parent / "data" / "mac-desktop.html").read_text("utf-8")
monkeypatch.setattr(MetadataFactory, "fetch_http", lambda *args, **kwargs: _html)
if isinstance(expect, Exception):
with pytest.raises(CliInputError) as error:
MetadataFactory(archive_id, spec=spec)._to_version(version_str)
MetadataFactory(archive_id, spec=spec)._to_version(version_str, arch)
assert error.type == CliInputError
assert str(expect) == str(error.value)
else:
assert MetadataFactory(archive_id, spec=spec)._to_version(version_str) == expect
assert MetadataFactory(archive_id, spec=spec)._to_version(version_str, arch) == expect
def test_list_fetch_tool_by_simple_spec(monkeypatch):
@@ -857,65 +903,64 @@ def test_show_list_tools_long_ifw(capsys, monkeypatch, columns, expect):
assert out == expect
LONG_MODULES_WIN_5140_120 = (
" Module Name Display Name Release Date Download Size Installed Size\n"
"====================================================================================================================\n"
"qtcharts Qt Charts for MinGW 7.3.0 32-bit 2019-12-11 772.7K 7.8M \n"
"qtdatavis3d Qt Data Visualization for MinGW 7.3.0 32-bit 2019-12-11 620.2K 5.0M \n"
"qtlottie Qt Lottie Animation for MinGW 7.3.0 32-bit 2019-12-11 153.5K 968.4K \n"
"qtnetworkauth Qt Network Authorization for MinGW 7.3.0 32-bit 2019-12-11 98.7K 638.6K \n"
"qtpurchasing Qt Purchasing for MinGW 7.3.0 32-bit 2019-12-11 50.9K 306.8K \n"
"qtquick3d Qt Quick 3D for MinGW 7.3.0 32-bit 2019-12-11 9.8M 21.2M \n"
"qtquicktimeline Qt Quick Timeline for MinGW 7.3.0 32-bit 2019-12-11 35.3K 154.1K \n"
"qtscript Qt Script for MinGW 7.3.0 32-bit 2019-12-11 1.0M 5.5M \n"
"qtvirtualkeyboard Qt Virtual Keyboard for MinGW 7.3.0 32-bit 2019-12-11 2.1M 6.8M \n"
"qtwebglplugin Qt WebGL Streaming Plugin for MinGW 7.3.0 32-bit 2019-12-11 201.7K 1.0M \n"
)
LONG_MODULES_WIN_5140_80 = (
" Module Name Display Name \n"
"====================================================================\n"
"qtcharts Qt Charts for MinGW 7.3.0 32-bit \n"
"qtdatavis3d Qt Data Visualization for MinGW 7.3.0 32-bit \n"
"qtlottie Qt Lottie Animation for MinGW 7.3.0 32-bit \n"
"qtnetworkauth Qt Network Authorization for MinGW 7.3.0 32-bit \n"
"qtpurchasing Qt Purchasing for MinGW 7.3.0 32-bit \n"
"qtquick3d Qt Quick 3D for MinGW 7.3.0 32-bit \n"
"qtquicktimeline Qt Quick Timeline for MinGW 7.3.0 32-bit \n"
"qtscript Qt Script for MinGW 7.3.0 32-bit \n"
"qtvirtualkeyboard Qt Virtual Keyboard for MinGW 7.3.0 32-bit \n"
"qtwebglplugin Qt WebGL Streaming Plugin for MinGW 7.3.0 32-bit\n"
)
@pytest.mark.parametrize(
"columns, expect",
"columns, use_cli, expect",
(
(
120,
" Module Name Display Name Release Date Download Size "
"Installed Size\n"
"======================================================================================================"
"==============\n"
"qtcharts Qt Charts for MinGW 7.3.0 32-bit 2019-12-11 772.7K "
"7.8M \n"
"qtdatavis3d Qt Data Visualization for MinGW 7.3.0 32-bit 2019-12-11 620.2K "
"5.0M \n"
"qtlottie Qt Lottie Animation for MinGW 7.3.0 32-bit 2019-12-11 153.5K "
"968.4K \n"
"qtnetworkauth Qt Network Authorization for MinGW 7.3.0 32-bit 2019-12-11 98.7K "
"638.6K \n"
"qtpurchasing Qt Purchasing for MinGW 7.3.0 32-bit 2019-12-11 50.9K "
"306.8K \n"
"qtquick3d Qt Quick 3D for MinGW 7.3.0 32-bit 2019-12-11 9.8M "
"21.2M \n"
"qtquicktimeline Qt Quick Timeline for MinGW 7.3.0 32-bit 2019-12-11 35.3K "
"154.1K \n"
"qtscript Qt Script for MinGW 7.3.0 32-bit 2019-12-11 1.0M "
"5.5M \n"
"qtvirtualkeyboard Qt Virtual Keyboard for MinGW 7.3.0 32-bit 2019-12-11 2.1M "
"6.8M \n"
"qtwebglplugin Qt WebGL Streaming Plugin for MinGW 7.3.0 32-bit 2019-12-11 201.7K "
"1.0M \n",
),
(
80,
" Module Name Display Name \n"
"====================================================================\n"
"qtcharts Qt Charts for MinGW 7.3.0 32-bit \n"
"qtdatavis3d Qt Data Visualization for MinGW 7.3.0 32-bit \n"
"qtlottie Qt Lottie Animation for MinGW 7.3.0 32-bit \n"
"qtnetworkauth Qt Network Authorization for MinGW 7.3.0 32-bit \n"
"qtpurchasing Qt Purchasing for MinGW 7.3.0 32-bit \n"
"qtquick3d Qt Quick 3D for MinGW 7.3.0 32-bit \n"
"qtquicktimeline Qt Quick Timeline for MinGW 7.3.0 32-bit \n"
"qtscript Qt Script for MinGW 7.3.0 32-bit \n"
"qtvirtualkeyboard Qt Virtual Keyboard for MinGW 7.3.0 32-bit \n"
"qtwebglplugin Qt WebGL Streaming Plugin for MinGW 7.3.0 32-bit\n",
),
(120, False, LONG_MODULES_WIN_5140_120),
(80, False, LONG_MODULES_WIN_5140_80),
(120, True, LONG_MODULES_WIN_5140_120),
(80, True, LONG_MODULES_WIN_5140_80),
),
)
def test_show_list_long_qt_modules(capsys, monkeypatch, columns, expect):
def test_show_list_long_qt_modules(capsys, monkeypatch, columns: int, use_cli: bool, expect: str):
update_xml = (Path(__file__).parent / "data" / "windows-5140-update.xml").read_text("utf-8")
monkeypatch.setattr(MetadataFactory, "fetch_http", lambda self, _: update_xml)
cli = Cli()
# Patching get_terminal_size prevents successful instantiation of Cli, so do it afterwards:
monkeypatch.setattr(shutil, "get_terminal_size", lambda fallback: os.terminal_size((columns, 24)))
meta = MetadataFactory(
ArchiveId("qt", "windows", "desktop"),
modules_query=("5.14.0", "win32_mingw73"),
is_long_listing=True,
)
show_list(meta)
if use_cli:
return_code = cli.run("list-qt windows desktop --long-modules 5.14.0 win32_mingw73".split())
assert return_code == 0
else:
meta = MetadataFactory(
ArchiveId("qt", "windows", "desktop"),
modules_query=ModulesQuery("5.14.0", "win32_mingw73"),
is_long_listing=True,
)
show_list(meta)
out, err = capsys.readouterr()
sys.stdout.write(out)
sys.stderr.write(err)
@@ -970,14 +1015,13 @@ def test_show_list_bad_connection(monkeypatch, capsys, exception_class, error_ms
raise exception_class(error_msg)
monkeypatch.setattr(source, mock)
meta = MetadataFactory(mac_wasm, spec=SimpleSpec("<5.9"))
meta = MetadataFactory(mac_qt, spec=SimpleSpec("<5.9"))
with pytest.raises(exception_class) as error:
show_list(meta)
assert error.type == exception_class
assert format(error.value) == (
f"{error_msg}\n"
"==============================Suggested follow-up:==============================\n"
"* Please use 'aqt list-qt mac desktop --extensions <QT_VERSION>' to list valid extensions.\n"
"* Please use 'aqt list-qt mac desktop' to check that versions of qt exist within the spec '<5.9'."
)
@@ -1022,7 +1066,13 @@ def fetch_expected_tooldata(json_filename: str) -> ToolData:
return ToolData(tools)
@pytest.mark.parametrize("host, target, tool_name", (("mac", "desktop", "tools_cmake"),))
@pytest.mark.parametrize(
"host, target, tool_name",
(
("mac", "desktop", "tools_cmake"),
("mac", "desktop", "sdktool"),
),
)
def test_list_tool_cli(monkeypatch, capsys, host: str, target: str, tool_name: str):
html_file = f"{host}-{target}.html"
xml_file = f"{host}-{target}-{tool_name}-update.xml"
@@ -1040,7 +1090,7 @@ def test_list_tool_cli(monkeypatch, capsys, host: str, target: str, tool_name: s
if not rest_of_url.endswith("Updates.xml"):
return htmltext
folder = urlparse(rest_of_url).path.split("/")[-2]
assert folder.startswith("tools_")
assert folder.startswith("tools_") or folder in ["sdktool"]
return xmltext
monkeypatch.setattr(MetadataFactory, "fetch_http", _mock_fetch_http)
@@ -1048,27 +1098,31 @@ def test_list_tool_cli(monkeypatch, capsys, host: str, target: str, tool_name: s
cli = Cli()
cli.run(["list-tool", host, target])
out, err = capsys.readouterr()
assert not err
output_set = set(out.strip().split())
assert output_set == expected_tools
cli.run(["list-tool", host, target, tool_name])
out, err = capsys.readouterr()
assert not err
output_set = set(out.strip().split())
assert output_set == expected_tool_modules
# Test abbreviated tool name: "aqt list-tool mac desktop ifw"
assert tool_name.startswith("tools_")
short_tool_name = tool_name[6:]
assert tool_name.startswith("tools_") or tool_name in ["sdktool"]
short_tool_name = tool_name[6:] if tool_name.startswith("tools_") else tool_name
cli.run(["list-tool", host, target, short_tool_name])
out, err = capsys.readouterr()
assert not err
output_set = set(out.strip().split())
assert output_set == expected_tool_modules
cli.run(["list-tool", host, target, tool_name, "-l"])
out, err = capsys.readouterr()
assert not err
expected_tooldata = format(fetch_expected_tooldata(xml_expect))
assert out.strip() == expected_tooldata
assert out.strip() == expected_tooldata.strip()
def test_fetch_http_ok(monkeypatch):
@@ -1117,3 +1171,58 @@ def test_fetch_http_download_error(monkeypatch, exception_on_error):
# Require that a fallback url was tried
assert len(urls_requested) == 2
@pytest.mark.parametrize(
"host, expected, all_arches",
(
("windows", "win32_mingw", ["win64_msvc2013_64", "win32_mingw", "win16_mingw"]),
("windows", "win32_mingw", ["win64_msvc2013_64", "win32_mingw"]),
("windows", "win1_mingw0", ["win64_msvc2013_64", "win_mingw900", "win1_mingw0"]),
("windows", "win32_mingw1", ["win64_msvc2013_64", "win32_mingw", "win32_mingw1"]),
("windows", "win64_mingw", ["win64_msvc2013_64", "win32_mingw900", "win64_mingw"]),
("windows", "win64_mingw81", ["win64_msvc2013_64", "win64_mingw81", "win64_mingw"]),
("windows", "win64_mingw73", ["win64_msvc2013_64", "win64_mingw53", "win64_mingw73"]),
("windows", "win64_mingw", ["win64_msvc2013_64", "win64_mingw", "win64_mingw"]),
("windows", EmptyMetadata(), []),
("linux", "gcc_64", ["should not fetch arches"]),
("mac", "clang_64", ["should not fetch arches"]),
),
)
def test_select_default_mingw(monkeypatch, host: str, expected: Union[str, Exception], all_arches: List[str]):
monkeypatch.setattr("aqt.metadata.MetadataFactory.fetch_arches", lambda *args, **kwargs: all_arches)
if isinstance(expected, Exception):
with pytest.raises(type(expected)) as e:
MetadataFactory(ArchiveId("qt", host, "desktop")).fetch_default_desktop_arch(Version("1.2.3"))
assert e.type == type(expected)
else:
actual_arch = MetadataFactory(ArchiveId("qt", host, "desktop")).fetch_default_desktop_arch(Version("1.2.3"))
assert actual_arch == expected
@pytest.mark.parametrize(
"expected_result, installed_files",
(
("mingw73_32", ["mingw73_32/bin/qmake.exe", "msvc2017/bin/qmake.exe"]),
(None, ["msvc2017/bin/qmake.exe"]),
(None, ["mingw73_win/bin/qmake.exe"]), # Bad directory: mingw73_win does not fit the mingw naming convention
(None, ["mingw73_32/bin/qmake", "msvc2017/bin/qmake.exe"]),
("mingw81_32", ["mingw73_32/bin/qmake.exe", "mingw81_32/bin/qmake.exe"]),
("mingw73_64", ["mingw73_64/bin/qmake.exe", "mingw73_32/bin/qmake.exe"]),
),
)
def test_find_installed_qt_mingw_dir(expected_result: str, installed_files: List[str]):
qt_ver = "6.3.0"
host = "windows"
# Setup a mock install directory that includes some installed files
with TemporaryDirectory() as base_dir:
base_path = Path(base_dir)
for file in installed_files:
path = base_path / qt_ver / file
path.parent.mkdir(parents=True, exist_ok=True)
path.write_text("Mock installed file")
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

View File

@@ -1,4 +1,5 @@
import re
from pathlib import Path
from tempfile import TemporaryDirectory
import pytest
@@ -58,7 +59,7 @@ def test_updater_update_license_io_error(monkeypatch, target_config: TargetConfi
with pytest.raises(UpdaterError) as err:
with TemporaryDirectory() as empty_dir:
# Try to update a Qt installation that does not exist
Updater.update(target_config, base_dir=empty_dir)
Updater.update(target_config, base_path=Path(empty_dir), installed_desktop_arch_dir=None)
assert err.type == UpdaterError
err_msg = format(err.value)
assert expected_err_pattern.match(err_msg)

33
tools/build_standalone.py Normal file
View File

@@ -0,0 +1,33 @@
import argparse
import os
import PyInstaller.__main__
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("arch", nargs="?")
args = parser.parse_args()
# build PyInstaller arguments
tools_dir = os.path.dirname(__file__)
name = "aqt" if args.arch is None else "aqt_" + args.arch
args = [
'--noconfirm',
'--onefile',
'--name', name,
'--paths', ".",
'--hidden-import', "aqt",
]
# Add data files
if os.name == 'nt':
adddata_arg = "{src:s};aqt"
else:
adddata_arg = "{src:s}:aqt"
for data in ["aqt/logging.ini", "aqt/settings.ini", "aqt/combinations.json"]:
args.append('--add-data')
args.append(adddata_arg.format(src=data))
args.append(os.path.join(tools_dir, "launch_aqt.py"))
# launch PyInstaller
PyInstaller.__main__.run(args)

8
tools/launch_aqt.py Normal file
View File

@@ -0,0 +1,8 @@
#!python.exe
import aqt
import re
import sys
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
sys.exit(aqt.main())