/****************************************************************************
**
** Copyright (C) 2024 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Installer Framework.
**
** $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$
**
****************************************************************************/

/*!
    \previouspage ifw-overview.html
    \page ifw-getting-started.html
    \nextpage ifw-use-cases.html

    \title Getting Started

    You can use the Qt Installer Framework to create installation programs for
    all kinds of applications, including (but not limited to) applications built
    with Qt.

    \section1 Supported Platforms

    You can use the Qt Installer Framework to create installers for all
    platforms supported by \l{https://doc.qt.io/qt-6/supported-platforms.html}{desktop Qt}.

    If you use Linux, install also
    \l {https://doc.qt.io/qt-6/linux-requirements.html} {Platform Plugin dependencies}.

    \section1 Building from Sources

    The following steps describe how to build the Qt Installer Framework
    yourself. You can skip this if you have downloaded a pre-built version
    of the framework.

    \section2 Supported Compilers

    You can compile the Qt Installer Framework with Microsoft Visual Studio
    2019 and newer, GCC 9 and newer, and Clang 13.0.0 and newer. Currently, the
    tested combination for Windows is Qt 6.6.0 with MSVC 2019 (Windows 10).

    \section2 Configuring Qt

    If you use a statically built Qt to build the Qt Installer Framework
    you do not have to deliver Qt libraries, which enables you to distribute
    installers as one file. For more information about statically linking
    against OpenSSL libraries, see \l{http://doc.qt.io/qt-6/ssl.html}{SSL
    Import and Export Restrictions}.

    The supported Qt version is 6.6.0.

    Get Qt sources:
    \code
    \l{https://wiki.qt.io/Building_Qt_6_from_Git}{Get Qt sources from git}.
    Call init-repository with --module-subset=qt5compat, qtbase, qtdeclarative, qttools, qttranslations
    \endcode

    \section3 Configuring Qt for Windows

    Use the following configuration options for Windows:

    \code
    configure -prefix %CD%\qtbase -release -static -static-runtime -accessibility -no-icu -no-sql-sqlite -no-qml-debug -nomake examples -nomake tests

    \endcode

    \section3 Configuring Qt for Linux

    Use the following configuration options for Linux:

    \code
    configure -prefix $PWD/qtbase -release -static -accessibility -qt-zlib -qt-libpng -qt-libjpeg -qt-pcre -no-glib -no-cups -no-sql-sqlite -no-feature-gssapi -no-qml-debug -no-opengl -no-egl -no-xinput2 -no-sm -no-icu -nomake examples -nomake tests -no-libudev -bundled-xcb-xinput -qt-harfbuzz -qt-doubleconversion
    \endcode

    \section3 Configuring Qt for macOS

    Use the following configuration options for macOS:

    \code
    configure -prefix $PWD/qtbase -release -static -accessibility -qt-zlib -qt-libpng -no-cups -no-sql-sqlite -no-qml-debug -nomake examples -nomake tests -no-freetype
    \endcode

    Build Qt:
    \code
    cmake --build . --parallel
    cmake --install .
    \endcode

    \section2 Third Party Dependencies

    The Qt Installer Framework sources contain a redistribution of parts of the
    \c libarchive compression and archive library, which requires you to link
    against the following libraries; \c liblzma, \c zlib, \c libbzip2, and on
    macOS, \c libiconv.

    To enable the use of \c libarchive, add the \c libarchive configuration
    feature to the list of values specified by the \c CONFIG variable.
    Installers created with this configuration support the creating and
    extracting of 7zip, zip, and tar archive files, with \c gzip, bzip2, and
    \c xz as available compression methods.

    \code
    qmake CONFIG+=libarchive
    \endcode

    You can use the \c IFW_ZLIB_LIBRARY, \c IFW_BZIP2_LIBRARY, \c IFW_LZMA_LIBRARY, and \c IFW_ICONV_LIBRARY
    variables to specify the exact library files.

    If you add the \c{-qt-zlib} configuration to the Qt version used to build the Qt Installer Framework, and
    \c IFW_ZLIB_LIBRARY variable is empty, \c libarchive will try to use the \c zlib library compiled
    into the QtCore module, which removes the need for an external library.

    If you do not enable \c libarchive support, the builtin LZMA SDK library will act as a fallback and
    installation of the extra dependencies will not occur, but created installers will
    only support the 7zip format.

    \note Building IFW with LZMA SDK is deprecated and may not be available in future versions.

    \section3 Installing Dependencies for Windows

    You can download the source archives for the dependencies from:

    \list
        \li \l https://tukaani.org/xz/
        \li \l https://zlib.net/
        \li \l https://www.sourceware.org/bzip2/
    \endlist

    When building the third party libraries with MSVC, make sure to use the
    same version that you used to build Qt, and that the compiler option used
    to select the run-time library matches the configuration options for Qt
    (debug/release, static/dynamic runtime).

    \section3 Installing Dependencies for Linux

    The required third party compression libraries are likely available from
    your distribution's package manager repositories.

    For example, on Ubuntu 18.04 you can invoke the following to install the
    development packages containing headers for the libraries:

    \code
    sudo apt install zlib1g-dev liblzma-dev libbz2-dev
    \endcode

    \section3 Installing Dependencies for macOS

    The easiest way to install the missing libraries is with a third party
    package manager solution, like Homebrew or MacPorts. On macOS 10.15 you
    should only need to additionally install the \c liblzma library.

    On Homebrew this would be:

    \code
    brew install xz
    \endcode

    \section3 Troubleshooting

    For \c libarchive related compilation errors, you may need to edit the definitions in
    a configuration header file respective to your platform. You can find this file in
    the \c src/libs/3rdparty/libarchive/config/ directory of the Installer Framework sources.


    \section2 Setting up Qt Installer Framework

    \list 1

        \li Clone the Qt Installer Framework source code from
            \l{http://code.qt.io/cgit/installer-framework/installer-framework.git/}
            to get the sources for the tools.

        \li Build the tools by running the "qmake" from the static Qt, followed by "make" or "nmake".

    \endlist

    \note To contribute patches to Qt Installer Framework, follow the standard
    Qt processes and guidelines. For more information, see
    \l{http://wiki.qt.io/Contribute}{Contribute to Qt}.

*/
