/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU Free Documentation License Usage
** Alternatively, this file may be used under the terms of the GNU Free
** Documentation License version 1.3 as published by the Free Software
** Foundation and appearing in the file included in the packaging of
** this file. Please review the following information to ensure
** the GNU Free Documentation License version 1.3 requirements
** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
** $QT_END_LICENSE$
**
****************************************************************************/

/*!
    \page supported-platforms.html
    \title Supported Platforms
    \brief The platforms supported by Qt.

    Qt is a commercial and open source licensed cross-platform application
    and UI framework. It is developed by The Qt Company, together with the
    Qt Project Community under an open source governance model.

    Using Qt, you can write GUI applications once and deploy them
    across desktop, mobile and embedded operating systems without
    rewriting the source code.

    Qt is supported on a variety of 32-bit and 64-bit platforms, and can usually
    be built on each platform with GCC, a vendor-supplied compiler, or a third
    party compiler as indicated in the overview below.

    Open GL (ES) 2.0, DirectX 9 or 11 (with ANGLE), or an \l {Qt Quick 2D Renderer} {alternative
    renderer} is required for \l [QtQuick] {Qt Quick} 2.
    \l [QtWidgets] {Qt Widgets}{Widgets} can be used without
    hardware acceleration.

    In Qt 5 all platforms are created using the \l{Qt Platform Abstraction}
    (QPA), which makes it easy to port Qt into a new operating system.

    The following platforms are supported in Qt \qtver. For support information
    for prior Qt releases, please consult the relevant version in the
    \l {http://doc.qt.io/archives/}{Qt Documentation Archives}.

    Configurations in \b bold are \l {Reference Configurations}.

    \note Support for specific configurations or operating system versions may
          end before the support for Qt \qtver does. A subsequent patch release
          of Qt \qtver may drop support for a configuration as a \e {reference
          configuration} or replace it with a currently-supported version.

    \include supported-platforms.qdocinc all

    \section1 Reference Configurations

    The reference configurations are run on the continuous integration (CI)
    system within Qt Project. In addition, they are subjected to unit test suite
    and other internal testing tools on a frequent basis (prior to new version
    releases, source tree branching, and at other significant period points in
    the development process). Errors or bugs discovered in these platforms are
    prioritized for correction. Significant errors discovered in tested
    configurations can impact release dates.

    Any configurations not listed above are not actively tested by the Qt
    Project. However, Qt may run on configurations other than those actively
    tested on, and additional configurations may be raised to tested state, if
    sufficient effort is made to bring continuous integration to an acceptable
    state for that particular configuration. The reference configurations are
    subject to change during the lifetime of a Qt release.

    Details of the reference configurations are stored as \e {provisioning scripts}
    in the \l {https://code.qt.io/cgit/qt/qt5.git/tree/coin?h=\qtver}
    {qt5 Git repository}.

    The Qt Company provides support for the officially supported platforms and
    configurations. The Qt Company, Qt partners, open source projects and community
    users are also able to provide assistance with various different platforms and
    configurations.

    \section1 Availability of Packages

    You can download the Qt 5 installers and source packages from the \l Downloads page.
    For more information, visit the \l{Getting Started with Qt} page.

    \note All the supported configurations are not provided as binary packages
    in the Qt installer. However, the intention is to provide the most widely-used
    reference configurations for the developer's convenience.

    \section2 Exceptions
    Individual modules might be available only on some platforms, or they might
    not support all configurations. For example, as Qt \WebEngine has Chromium
    as a third-party dependency, platform or configuration limitations upstream
    also apply to Qt \WebEngine.

    The documentation for each module contains detailed information about any
    exceptions the module has from the general platform and configuration
    support as described on this page.

    \section1 Deployment of Qt Applications

    The deployment procedure for each platform is different and they are
    covered in greater detail in their platform pages. Meanwhile, there is a
    deployment article for summarizing the deployment procedure in general.
    \list
    \li \l{Deploying Qt Applications}
        \list
            \li \l{Qt Creator: Deploying Applications to Android Devices}{Android}
            \li \l{Qt for iOS}{iOS}
            \li \l{Qt for Linux/X11 - Deployment}{Linux/X11}
            \li \l{Qt for macOS - Deployment}{\macos}
            \li \l{Qt for Windows - Deployment}{Windows}
        \endlist
    \endlist

    \section1 General Legal Disclaimer

    Please note that Qt is offered on an "as is" basis without warranty
    of any kind and that our products are not error or bug free. To the maximum extent
    permitted by applicable law, The Qt Company on behalf of itself and its suppliers, disclaims all
    warranties and conditions, either express or implied, including, but not limited to,
    implied warranties of merchantability, fitness for a particular purpose, title and
    non-infringement with regard to the Licensed Software.

*/
