aboutsummaryrefslogtreecommitdiffstats
path: root/sources/pyside6/doc/gettingstarted/index.rst
diff options
context:
space:
mode:
authorShyamnath Premnadh <Shyamnath.Premnadh@qt.io>2024-08-05 17:02:16 +0200
committerShyamnath Premnadh <Shyamnath.Premnadh@qt.io>2024-08-12 10:21:38 +0200
commit44385439c3b9879dfa35a3c5635493beec77cb92 (patch)
treeb4b55a64c6eb0e972c4075caf7da1680ad2725c7 /sources/pyside6/doc/gettingstarted/index.rst
parent19050e72d1b2be21d95e8d128574a49043a48bd6 (diff)
Documentation: Rearrange sections
- Rename 'Quick Start' to 'Getting Started'. Also, update the links accordingly. - The page 'Getting Started' is a building from source page. Hence renamed it accordingly with 3 sections - Linux, macOS and Windows. Each sections contains the steps to build from source for the specific platform. - Move 'Package Details' into the main table of contents - Move 'Porting from PySide2 to PySide6' into the 'Getting Started' section. - Additionally, fix the links accordingly and also fix some broken links - Additionally, increase the minumum Python version from 3.7 to 3.8 in the Getting Started section. Task-number: PYSIDE-2833 Task-number: PYSIDE-2837 Change-Id: I07f35dbe583533ff122f6ecb4deeb9c95389b3d1 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io> Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
Diffstat (limited to 'sources/pyside6/doc/gettingstarted/index.rst')
-rw-r--r--sources/pyside6/doc/gettingstarted/index.rst572
1 files changed, 0 insertions, 572 deletions
diff --git a/sources/pyside6/doc/gettingstarted/index.rst b/sources/pyside6/doc/gettingstarted/index.rst
deleted file mode 100644
index 51d8bea26..000000000
--- a/sources/pyside6/doc/gettingstarted/index.rst
+++ /dev/null
@@ -1,572 +0,0 @@
-Getting Started
-===============
-
-.. important:: This page is focused on building |project| **from source**.
- If you just want to install |pymodname|, you need to run: :command:`pip install pyside6`.
-
- For more details, refer to our :ref:`quick-start` guide. Additionally, you can check the
- :ref:`FAQ <faq>` related to the project.
-
-.. _Quick Start: quickstart.html
-
-General Requirements
---------------------
-
-The following prerequisites must be installed before you build |project|.
-On **Linux** you might get them with your operating system package manager, on **macOS**
-you might get them with ``brew``, and on **Windows** you can download the installer from each
-website.
-
-* **Python**: 3.9+ `[official Python website] <https://www.python.org/downloads/>`_
-* **Qt:** 6.8+ `[online installer] <https://download.qt.io/official_releases/online_installers/>`_
-* **CMake:** 3.18+ `[official CMake website] <https://cmake.org/download/>`_
-* **Git:** 2.0+. `[official Git website] <https://git-scm.com/downloads>`_
-* **libclang:** The libclang library, recommended: version 16+ for 6.8+.
- Prebuilt versions for each OS can be `downloaded here`_.
-* Check the `Supported Platforms of Qt`_
-
-.. _downloaded here: https://download.qt.io/development_releases/prebuilt/libclang/
-.. _`Supported Platforms of Qt` : https://doc.qt.io/qt-6/supported-platforms.html
-
-Guides per platform
--------------------
-
-.. toctree::
- :maxdepth: 1
- :hidden:
-
- linux.rst
- macOS.rst
- windows.rst
- package_details.rst
- porting_from2.rst
-
-You can refer to the following pages for platform specific instructions:
-
-.. grid:: 1 3 3 3
- :gutter: 2
-
- .. grid-item-card::
- :img-top: ../images/windows.svg
- :class-item: text-center
-
- +++
- .. button-ref:: windows
- :color: primary
- :outline:
- :expand:
-
- Windows
-
- .. grid-item-card::
- :img-top: ../images/macos.svg
- :class-item: text-center
-
- +++
- .. button-ref:: macOS
- :color: primary
- :outline:
- :expand:
-
- macOS
-
- .. grid-item-card::
- :img-top: ../images/linux.svg
- :class-item: text-center
-
- +++
- .. button-ref:: linux
- :color: primary
- :outline:
- :expand:
-
- Linux
-
-.. important:: |project| does not yet support WebAssembly and the mobile operating systems (Android or iOS).
- Most Linux-based embedded OS provide PySide with their official
- package manager (for example, `Raspbian`_ and `ArchlinuxARM`_).
-
-.. _Raspbian: https://www.raspbian.org/
-.. _ArchlinuxARM: https://archlinuxarm.org/
-
-A normal building command will look like this::
-
- python setup.py install --qtpaths=/path/to/qtpaths \
- --ignore-git \
- --debug \
- --build-tests \
- --parallel=8 \
- --verbose-build \
- --module-subset=Core,Gui,Widgets
-
-Which will build and install the project with **debug** symbols, including the **tests**,
-using **ninja** (instead of make), and considering only the **module subset** of
-:mod:`QtCore <PySide6.QtCore>`, :mod:`QtGui <PySide6.QtGui>`, and
-:mod:`QtWidgets <PySide6.QtWidgets>`.
-
-`CMake Unity Build Mode`_ is used by default for speed-up.
-
-Other important options to consider are:
- * ``--cmake``, to specify the path to the cmake binary,
- * ``--reuse-build``, to rebuild only the modified files,
- * ``--openssl=/path/to/openssl/bin``, to use a different path for OpenSSL,
- * ``--standalone``, to copy over the Qt libraries into the final package to make it work on other
- machines,
- * ``--build-docs``, to enable the documentation build.
- * ``--doc-build-online``, to build documentation using the online template (by
- default it uses the offline)
-
-Testing the installation
-------------------------
-
-Once the installation finishes, you will be able to execute any of our examples::
-
- python examples/widgets/widgets/tetrix.py
-
-Running Tests
--------------
-
-Using the ``--build-tests`` option will enable us to run all the auto tests inside the project::
-
- python testrunner.py test > testlog.txt
-
-.. note:: On Windows, don't forget to have qtpaths in your path
- (:command:`set PATH=C:\\\Path\\\to\\\Qt\\\6.4.0\\\msvc2019_64\\\bin;%PATH%`)
-
-You can also run a specific test (for example ``qpainter_test``) by running::
-
- ctest -R qpainter_test --verbose
-
-.. _cross_compilation:
-
-Cross Compilation
------------------
-
-Starting from 6.3, it is possible to cross-compile Shiboken (module), and
-PySide. This functionality is still in Technical Preview, which means it could
-change in the future releases.
-
-.. important:: The only supported configuration is using a host Linux
- machine to cross-compile to a Linux target platform.
-
-Cross compiling software is a valid use case that many projects rely on,
-however, it is a complicated process that might fail due to many reasons.
-
-Before starting with the process, it is important to understand the details of
-the build system, and the goal of cross compilation.
-
-In the build process, a ``Host`` is the computer you are currently using to
-compile, and a ``Target`` is your embedded device that you are compiling for.
-
-Qt for Python is being built using setuptools, and relies on a ``setup.py`` file
-that is called recursively to build Shiboken (module),
-Shiboken (generator), and PySide. As the generator is creating
-the wrappers for the bindings, it's not cross compiled
-for the target.
-Only the Shiboken (module) and PySide are cross compiled.
-
-The building process requires a Qt installation, and a Python interpreter
-on both the host, and the target. The used Qt versions on both platforms
-should have the same minor version. That is, Qt 6.3 (host)
-cannot be used with a Qt 6.2 (target), or the other way around.
-
-.. note:: It is recommended to use the same version of Qt on both host and target to avoid possible
- unconventional errors.
-
-Prerequisites
-~~~~~~~~~~~~~
-
-First and foremost, you need to have access to the target device because you
-need to copy several system files (sysroot). We recommend a Linux OS that has
-the latest Qt versions, like `Manjaro ARM`_ or `Archlinux ARM`_.
-
-* (target) Install Qt 6.3+ on the system using the package manager.
-* (host) Install Qt 6.3+ on the system using the package manager or Qt
- Installer.
-* (target, host) Install the library and development packages that provide
- C++ headers, linkers, libraries, and compilers.
-* (target, host) Install Python interpreter v3.7 or later
-* (target, host) Install CMake 3.17+
-
-After installing these prerequisites, copy the ``target`` sysroot to your
-``host`` computer. This process is tricky, because copying system files from
-another computer might cause problems with the symbolic links. Here you
-have two options to achieve that.
-
-Option A: Copying the files
-***************************
-
-Create a directory to copy the sysroot of your target device,
-for example ``rpi-sysroot``, and perform the copy on your host computer:
-
-.. code-block:: bash
-
- rsync -vR --progress -rl --delete-after --safe-links \
- USERNAME@TARGET_IP:/{lib,usr,opt/vc/lib} rpi-sysroot/
-
-Ensure to replace ``USERNAME`` and ``TARGET_IP`` with your system appropriate
-values.
-
-Option B: Packaging the file system
-***********************************
-
-Create a package for your sysroot in your target:
-
-.. code-block:: bash
-
- tar cfJ ~/sysroot.tar.xz /lib /usr /opt/vc/lib
-
-Copy the package from the target to your host:
-
-.. code-block:: bash
-
- rsync -vR --progress USERNAME@TARGET_IP:sysroot.tar.xz .
-
-Once you have the tar file, unpack it inside a ``rpi-sysroot`` directory.
-
-Fix Symlinks
-************
-
-It is recommended to run the following script to fix
-most of the issues you would find with symbolic links:
-
-.. code-block:: python
-
- import sys
- from pathlib import Path
- import os
-
- # Take a sysroot directory and turn all the absolute symlinks and turn them into
- # relative ones such that the sysroot is usable within another system.
-
- if len(sys.argv) != 2:
- print(f"Usage is {sys.argv[0]} <sysroot-directory>")
- sys.exit(-1)
-
- topdir = Path(sys.argv[1]).absolute()
-
- def handlelink(filep, subdir):
- link = filep.readlink()
- if str(link)[0] != "/":
- return
- if link.startswith(topdir):
- return
- relpath = os.path.relpath((topdir / link).resolve(), subdir)
- os.unlink(filep)
- os.symlink(relpath, filep)
-
- for f in topdir.glob("**/*"):
- if f.is_file() and f.is_symlink():
- handlelink(f, f.parent)
-
-Setting up the toolchain
-~~~~~~~~~~~~~~~~~~~~~~~~
-
-To perform the cross compilation, you need a special set of compilers,
-libraries, and headers, which runs on the host architecture, but generates
-(binaries/executables) for a target architecture.
-For example, from x86_64 to aarch64.
-
-It is recommended to use the official 10.2 `ARM Developer cross compilers`_,
-which you can find on their official website. For this tutorial, we choose
-``aarch64`` target architecture and we will assume that you downloaded the
-`gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu.tar.xz`_ file,
-and unpacked it.
-
-With those compilers, now you need a CMake toolchain file. This is
-a configuration file to set the compilers and sysroot information, together
-with extra options like compilation flags, and other details. You can use the
-following file as an example, but keep in mind they might vary:
-
-.. code-block:: cmake
-
- # toolchain-aarch64.cmake
- cmake_minimum_required(VERSION 3.18)
- include_guard(GLOBAL)
-
- set(CMAKE_SYSTEM_NAME Linux)
- set(CMAKE_SYSTEM_PROCESSOR aarch64)
-
- set(TARGET_SYSROOT /path/to/your/target/sysroot)
- set(CROSS_COMPILER /path/to/your/crosscompiling/compilers/)
-
- set(CMAKE_SYSROOT ${TARGET_SYSROOT})
-
- set(ENV{PKG_CONFIG_PATH} "")
- set(ENV{PKG_CONFIG_LIBDIR} ${CMAKE_SYSROOT}/usr/lib/pkgconfig:${CMAKE_SYSROOT}/usr/share/pkgconfig)
- set(ENV{PKG_CONFIG_SYSROOT_DIR} ${CMAKE_SYSROOT})
-
- set(CMAKE_C_COMPILER ${CROSS_COMPILER}/aarch64-none-linux-gnu-gcc)
- set(CMAKE_CXX_COMPILER ${CROSS_COMPILER}/aarch64-none-linux-gnu-g++)
-
- set(QT_COMPILER_FLAGS "-march=armv8-a")
- set(QT_COMPILER_FLAGS_RELEASE "-O2 -pipe")
- set(QT_LINKER_FLAGS "-Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed")
-
- set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
- set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
- set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
- set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
-
- include(CMakeInitializeConfigs)
-
- function(cmake_initialize_per_config_variable _PREFIX _DOCSTRING)
- if (_PREFIX MATCHES "CMAKE_(C|CXX|ASM)_FLAGS")
- set(CMAKE_${CMAKE_MATCH_1}_FLAGS_INIT "${QT_COMPILER_FLAGS}")
-
- foreach (config DEBUG RELEASE MINSIZEREL RELWITHDEBINFO)
- if (DEFINED QT_COMPILER_FLAGS_${config})
- set(CMAKE_${CMAKE_MATCH_1}_FLAGS_${config}_INIT "${QT_COMPILER_FLAGS_${config}}")
- endif()
- endforeach()
- endif()
-
- if (_PREFIX MATCHES "CMAKE_(SHARED|MODULE|EXE)_LINKER_FLAGS")
- foreach (config SHARED MODULE EXE)
- set(CMAKE_${config}_LINKER_FLAGS_INIT "${QT_LINKER_FLAGS}")
- endforeach()
- endif()
-
- _cmake_initialize_per_config_variable(${ARGV})
- endfunction()
-
-You need to adjust the paths in these two lines::
-
- set(TARGET_SYSROOT /path/to/your/target/sysroot)
- set(CROSS_COMPILER /path/to/your/crosscompiling/compilers/)
-
-and replace them with the sysroot directory (the one we called ``rpi-sysroot``),
-and the compilers (the ``gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin`` directory).
-
-
-Cross compiling PySide
-~~~~~~~~~~~~~~~~~~~~~~
-
-After you have installed the prerequisites and copied the necessary files, you
-should have the following:
-
-* The compilers to cross compile (``gcc-argm-10.2-...``),
-* The target sysroot (``rpi-sysroot``),
-* The toolchain cmake file (``toolchain-aarch64.cmake``),
-* The ``pyside-setup`` repository,
-
-An example of the ``setup.py`` invocation might look like the following:
-
-.. code-block:: bash
-
- python setup.py bdist_wheel \
- --parallel=8 --ignore-git --reuse-build --standalone --limited-api=yes \
- --cmake-toolchain-file=/opt/toolchain-aarch64.cmake \
- --qt-host-path=/opt/Qt/6.3.0/gcc_64 \
- --plat-name=linux_aarch64
-
-Depending on the target platform, you could use ``linux_armv7``,
-``linux_aarch64``, etc.
-
-For embedded platforms, which typically do not have Qt and its tools fully
-built, the option ``--no-qt-tools`` can be used to prevent the bundling of the
-tools.
-
-If the process succeeds, you will find the target wheels in your ``dist/``
-directory, for example:
-
-.. code-block:: bash
-
- PySide6-6.3.0-6.3.0-cp36-abi3-manylinux2014_aarch64.whl
- shiboken6-6.3.0-6.3.0-cp36-abi3-manylinux2014_aarch64.whl
-
-
-Troubleshooting
-***************
-
-* If the auto-detection mechanism fails to find the Python or Qt installations
- you have in your target device, you can use two additional options::
-
- --python-target-path=...
-
- and::
-
- --qt-target-path=...
-
-* In case the automatic build of the host Shiboken (generator) fails,
- you can specify the custom path using::
-
- --shiboken-host-path=...
-
-.. _`Manjaro ARM`: https://manjaro.org/download/#ARM
-.. _`Archlinux ARM`: https://archlinuxarm.org
-.. _`ARM Developer Cross Compilers`: https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads
-.. _`gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu.tar.xz`: https://developer.arm.com/-/media/Files/downloads/gnu-a/10.2-2020.11/binrel/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu.tar.xz
-
-.. _building_documentation:
-
-Building the documentation
---------------------------
-
-Starting from 6.3, the documentation is not being built by default.
-When using the second option described in this section, make sure to use the
-``--build-docs`` option.
-
-Install the specific documentation requirements in your Python virtual
-environment::
-
- pip install -r requirements-doc.txt
-
-You can find the ``requirements-doc.txt`` file in the root of the repository.
-
-Starting from 5.15, there are two options to build the documentation:
-
-1. Building the base documentation (no API)
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The process of parsing Qt headers to generate the PySide API documentation can take several
-minutes, this means that modifying a specific section of the documentation we currently have, might
-become a hard task. You may only care about the base documentation, which comprises all the
-documentation except for the API documentation.
-
-To generate this, execute the following command::
-
- python setup.py build_base_docs
-
-This will generate an ``html/`` directory with the following structure::
-
- html
- └── pyside6
- ├── index.html
- ├── ...
- └── shiboken6
- ├── index.html
- └── ...
-
-so you can open the main page ``html/pyside6/index.html`` on your browser to check the generated
-files.
-
-This is useful when updating the general sections of the documentation, adding tutorials,
-modifying the build instructions, and more.
-
-.. note:: In case you are interested in only generating the Example Gallery,
- you would need to run ``python tools/example_gallery/main.py`` to
- generate the examples ``documentation`` for the gallery. This will
- also be used internally by the ``build_base_docs`` target
-
-
-2. Building the documentation (Base + API)
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The documentation is being generated using **qdoc** to get the API information, and also **sphinx**
-for the local Python related notes.
-
-The system requires the ``libxml2`` and ``libxslt`` libraries.
-
-After installing ``graphviz`` (included in the ``requirements-doc.txt`` file),
-the ``dot`` command needs to be in PATH, otherwise,
-the process will fail. Installing ``graphviz`` system-wide is also an option.
-
-Since the process relies on a Qt installation, you need to specify where the
-``qtbase`` directory of a Qt source tree is located by passing it to
-the command line option ``--qt-src-dir``.
-
-Once the common ``setup.py`` build process finishes (remember to use
-``--build-docs`` to enable the documentation build, and ``--doc-build-online``
-to get the HTML files), you can go to the generated
-``build/<your_env_name>/build/pyside6`` directory, and run::
-
- ninja apidoc
-
-You can add ``-j X``, to perform the build process in parallel with
-X processes.
-
-.. note:: The :command:`apidoc` make target builds offline documentation in ``QCH``
- (Qt Compressed Help) format by default. You can switch to building for the
- online use with the ``--doc-build-online`` configure option.
-
-The target executes several steps:
-
-#. The ``qdoc`` tool is run over the Qt source code to produce documentation in WebXML format.
-#. ``shiboken6`` is run to extract the functions for which bindings exist from WebXML and convert it into RST.
-#. ``sphinx`` is run to produce the documentation in HTML format.
-
-Re-running the command will not execute step 1 unless the file
-``qdoc-output/webxml/qtcore-index.webxml`` is removed from the build tree.
-Similarly, step 2 will not be executed unless the file ``base/PySide6/QtCore/index.rst``
-is removed.
-
-Finally, you will get a ``html`` directory containing all the generated documentation. The offline
-help files, ``PySide.qch`` and ``Shiboken.qch``, can be moved to any directory of your choice. You
-can find ``Shiboken.qch`` in the build directory, ``build/<your_env_name>/build/shiboken6/doc/html``.
-
-If you want to temporarily change a ``.rst`` file to examine the impact on
-formatting, you can re-run ``sphinx`` in the ``doc`` directory::
-
- sphinx-build base html
-
-Viewing offline documentation
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The offline documentation (QCH) can be viewed using the *Qt Creator* IDE or
-*Qt Assistant*, which is a standalone application for viewing QCH files.
-
-To view the QCH using *Qt Creator*, following the instructions outlined in
-`Using Qt Creator Help Mode <https://doc.qt.io/qtcreator/creator-help.html>`_.
-If you chose to use *Qt Assistant* instead, use the following command to register
-the QCH file before launching *Qt Assistant*::
-
- assistant -register PySide.qch
-
-Troubleshooting documentation
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The documentation uses intersphinx to link from the PySide to the
-Shiboken documentation. This can fail if
-
-* the default ``QCH`` format is used; in which case the required ``objects.inv``
- files are not generated. Use ``--doc-build-online``.
-* base and full doc builds are mixed, resulting in wrong values for the
- intersphinx location in the CMake files. Re-run ``cmake`` to fix this.
-
-Using the internal tools
-------------------------
-
-A set of tools can be found under the ``tools/`` directory inside the ``pyside-setup`` repository.
-
-* ``checklibs.py``: Script to analyze dynamic library dependencies of Mach-O binaries.
- To use this utility, just run::
-
- python checklibs.py /path/to/some.app/Contents/MacOS/Some
-
- This script was fetched from this repository_.
-
-* ``create_changelog.py``: Script used to create the CHANGELOG that you can find in the ``dist/``
- directory. Usage::
-
- python create_changelog.py -r 6.0.1 -v v6.0.0..6.0 -t bug-fix
-
-* ``debug_windows.py``: This script can be used to find out why PySide modules
- fail to load with various DLL errors like Missing DLL or Missing symbol in DLL.
-
- You can think of it as a Windows version of :command:`ldd` / ``LD_DEBUG``.
-
- Underneath, it uses the :command:`cdb.exe` command line debugger and the :command:`gflags.exe`
- tool, which are installed with the latest Windows Kit.
-
- The aim is to help developers debug issues that they may encounter using the PySide imports on
- Windows. The user should then provide the generated log file.
-
- Incidentally it can also be used for any Windows executables, not just Python.
- To use it just run::
-
- python debug_windows.py
-
-* ``missing_bindings.py``: This script is used to compare the state of PySide and PyQt
- regarding available modules and classses. This content is displayed in our `wiki page`_,
- and can be used as follows::
-
- python missing_bindings.py --qt-version 6.0.1 -w all
-
-.. note:: The script relies on BeautifulSoup to parse the content and generate a list of the
- missing bindings.
-
-.. _repository: https://github.com/liyanage/macosx-shell-scripts/
-.. _`wiki page`: https://wiki.qt.io/Qt_for_Python_Missing_Bindings
-.. _BeautifulSoup: https://www.crummy.com/software/BeautifulSoup/
-.. _`CMake Unity Build Mode` : https://cmake.org/cmake/help/latest/prop_tgt/UNITY_BUILD.html