How to build
=====================

The instructions should help you build the Installer Framework from scratch.


Get the sources
---------------------

Use Git to check out the Qt Installer Framework sources that are hosted at:

http://code.qt.io/cgit/installer-framework/installer-framework.git/


Build a static Qt
---------------------

Building the Qt Installer Framework from sources requires at least Qt version 6.6.0.
Supported compilers are MSVC 2019 or newer, GCC 9 or newer,
and Clang 13.0.0 or newer. Currently, the tested combination for Windows is Qt 6.6.0 with MSVC 2019 (Windows 10).

If you want to ship your installer as a single file you have to build
Qt and the Qt Installer Framework statically.

See the Qt documentation for the prerequisites and steps to build Qt from sources.
Please read SSL Import and Export Restrictions from http://doc.qt.io/qt-6/ssl.html if
you are statically linking against OpenSSL libraries.

### Windows

Recommended configuration options for Microsoft Windows:

configure -prefix %CD%\qtbase -release -static -static-runtime -accessibility -no-icu -no-sql-sqlite -no-qml-debug -nomake examples -nomake tests
Build Qt:
cmake --build . --parallel
cmake --install .
### Linux

Recommended configuration options for Linux:

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

Build Qt:
cmake --build . --parallel
cmake --install .
### macOS

Recommended configuration options for macOS:

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

Build Qt:
cmake --build . --parallel
cmake --install .


Third party dependencies
---------------------

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

The usage of libarchive is recommended and can be enabled by adding the libarchive
configuration feature to the list of values specified by the CONFIG variable. Installers
created with this configuration support the (de)compression of 7zip, zip, and tar archive
files, with gzip, bzip2, and xz as available compression methods.

The IFW_ZLIB_LIBRARY, IFW_BZIP2_LIBRARY, IFW_LZMA_LIBRARY, and IFW_ICONV_LIBRARY variables
can be used to specify the exact library files if required.

If the Qt version used to build the Qt Installer Framework was configured with -qt-zlib and
IFW_ZLIB_LIBRARY variable is empty, libarchive will attempt to use the zlib library compiled
into the QtCore module, which removes the need for an external library.

If you do not enable libarchive support, the builtin LZMA SDK library will be used as a
fallback and installation of the additional dependencies can be skipped, but created
installers will only support the 7zip format. Note that building IFW with LZMA SDK is
deprecated and may not be available in future versions.

### Windows

The liblzma, zlib, libbzip2 libraries are required. The source archives
can be downloaded from:

https://tukaani.org/xz/
https://zlib.net/
https://www.sourceware.org/bzip2/

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).

### 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
missing development packages:

$ sudo apt install zlib1g-dev liblzma-dev libbz2-dev

### 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 liblzma library.

On Homebrew this would be:

$ brew install xz

### Troubleshooting

For libarchive related compilation errors, you may need to edit the definitions in
a configuration header file respective to your platform, which can be found from the
'src/libs/3rdparty/libarchive/config/*' directory of the Installer Framework sources.


Build the Framework
---------------------

Run 'qmake && make' (or 'nmake' ...) to build the Qt Installer
Framework. The documentation can be generated by 'make docs'.
