% README.linux 2025-02-19
% Tested on Ubuntu 20.04.4 LTS, Ubuntu 22.04 LTS, Ubuntu 24.04 LTS and
% Fedora Linux 41 (Workstation Edition)

1. Prerequisites for building zint
==================================

Prerequisites are git, cmake, make, gcc and gcc-c++, e.g. Ubuntu/Debian

    sudo apt install git cmake build-essential

or Fedora (git, make and gcc should already be installed)

    sudo dnf install cmake gcc-c++

libpng is optional but necessary for PNG support, e.g. Ubuntu/Debian

    sudo apt install libpng-dev

or Fedora

    sudo dnf install libpng-devel

Then either download the source code tarball

    wget -O zint-2.15.0-src.tar.gz \
        https://sourceforge.net/projects/zint/files/zint/2.15.0/zint-2.15.0-src.tar.gz/download
    tar xf zint-2.15.0-src.tar.gz
    cd zint-2.15.0-src

or clone the latest source

    git clone https://git.code.sf.net/p/zint/code zint
    cd zint


2. Prerequisites for building zint-qt
=====================================

zint-qt can be built with either Qt5 (preferred) or Qt6. First, install mesa (for OpenGL), e.g.
Ubuntu/Debian

    sudo apt install mesa-common-dev libglu1-mesa-dev

or Fedora

    sudo dnf install mesa-libGL mesa-libGL-devel

zint-qt has issues running on Wayland so sets X11 as the Qt platform (via the environment variable
"QT_QPA_PLATFORM=xcb") on startup unless already set.

2.1. Using Qt packages
----------------------

If packages for Qt exist for your distro, it might be easiest to use them, although knowing
what their ever-changing names and contents are isn't. A complication is that zint-qt uses 2 Qt
components beyond the basic setup: Qt UI Tools (for dynamically loading the symbology-specific
tabs), and Qt SVG (for rendering icons).

E.g. on Ubuntu 22.04 or 24.04

    sudo apt install qtbase5-dev qttools5-dev qttools5-dev-tools libqt5svg5-dev

or Ubuntu 20.04

    sudo apt install qt5-default qt5-uitools

or Fedora (not recommended)

     sudo dnf install qt5-qtbase-devel qt5-qttools-devel qt5-qttools-static qt5-qtsvg-devel

You may need to tell CMake where to find the ".cmake" modules:

    export CMAKE_MODULE_PATH=<cmake-module-path>/Qt5

e.g. CMAKE_MODULE_PATH=/usr/lib/x86_64-linux-gnu/cmake/Qt5

2.2. Using the Qt Maintenance Tool
----------------------------------

Alternatively, for a more consistent experience, sign up and download the Qt Maintenance Tool
from

    https://www.qt.io/download-qt-installer

On Ubuntu/Debian you may need to install xinerama to run the tool:

    sudo apt install libxcb-xinerama0

Launch the tool and install the "Desktop gcc 64-bit" component for either Qt 5.15.2 (preferred)
or Qt 6 (>= 6.1).

Once Qt is installed you may need to tell CMake where it is:

    export CMAKE_PREFIX_PATH=<qt-version-dir>/gcc_64

e.g. export CMAKE_PREFIX_PATH=/opt/Qt/5.15.2/gcc_64


3. Build
========

The rest is standard CMake

    cd zint
    mkdir build
    cd build
    cmake ..
    make
    sudo make install

4. Run
======

On Fedora you may have to set LD_LIBRARY_PATH for zint ("libzint.so") and zint-qt (Qt libraries):

    export LD_LIBRARY_PATH=/usr/local/lib64:<qt-version-dir>/gcc_64/lib


5. CMake options
================

A number of options are available:

ZINT_COVERAGE:BOOL=OFF  # Set code coverage flags
ZINT_DEBUG:BOOL=OFF     # Set debug compile flags
ZINT_FRONTEND:BOOL=ON   # Build frontend
ZINT_NOOPT:BOOL=OFF     # Set no optimize compile flags
ZINT_SANITIZE:BOOL=OFF  # Set sanitize compile/link flags
ZINT_SANITIZE:BOOL=OFF  # Set sanitize address/undefined
ZINT_SANITIZEM:BOOL=OFF # Set sanitize memory (ignored if ZINT_SANITIZE)
ZINT_SHARED:BOOL=ON     # Build shared library
ZINT_STATIC:BOOL=OFF    # Build static library
ZINT_TEST:BOOL=OFF      # Set test compile flag
ZINT_UNINSTALL:BOOL=ON  # Add uninstall target
ZINT_USE_PNG:BOOL=ON    # Build with PNG support
ZINT_USE_QT:BOOL=ON     # Build with Qt support
ZINT_QT6:BOOL=OFF       # If ZINT_USE_QT, use Qt6

which can be set by doing e.g.

    cmake -DZINT_SANITIZE=ON ..

Note that ZINT_SANITIZEM (Clang only) is incompatible with ZINT_SANITIZE, and also with
ZINT_USE_PNG, unless libpng has also been instrumented with -fsanitize=memory.

For details on ZINT_TEST and building the zint test suite, see "backend/tests/README".
