# Building_Qt6_From_Source_on_MacOSX

On Catalina you need XCode 12.4 (and nothing lower or higher)
The key is to use the latest XCode that runs on your build machine that includes
the macOS 11 SDK (or higher) and can target back to at least as far as macOS 10.14
(the farther back the better)

# *** IMPORTANT ***
# Qt Pre-Built Binary Versions do NOT support proprietary codecs such as 
# mpeg4 or gif multipmedia in its QWebEngine by default!

# To support these epub basic formats you will need to build your own Qt
# directly from source.

# We do highly recommend you use the same Qt versions as official Sigil builds on Mac OS X.
# which is now Qt 6.2.2 or later

# These instructions will lead you through building from source
# FIRST:  make sure you have XCode 12 or later installed and the Command Line Tools

# set the deployment target (this is minimum needed)

export MACOSX_DEPLOYMENT_TARGET=10.14

# cd to a location to store your src tree then do
export MYQTSRC=`pwd`


# Build Prerequisites
# -------------------
# First build and install the following prerequisites for the build: 
#      cmake, ninja, libpng, and libjpeg-turbo
# and install into /usr/local so that they can be found during qtwebkit's build
# Note: older versions of these prerequisites may work but have not been tested


# Download cmake 3.22.1 or later from https://cmake.org/download
tar -zxvf cmake-3.22.1.tar.gz
cd cmake-3.22.1
./bootstrap --prefix=/usr/local -- -DCMAKE_BUILD_TYPE:STRING=Release
make
sudo make install


# Need to download and install latest ninja - from https://github.com/ninja-build/ninja/releases
unzip ninja-mac.zip
sudo cp ninja /usr/local/bin
which ninja


# Download libpng 1.6.36 or later from png's sourceforge site: http://www.libpng.org/pub/png/libpng.html
# If you are building on MacOS 10.12, you will need to patch libpng
# to support macos 10.12
export LDFLAGS="-Wl,-macosx_version_min,10.14"
export CFLAGS="-mmacosx-version-min=10.14 -Werror=partial-availability"
tar -zxvf libpng-1.6.36.tar.gz
cd libpng-1.6.36
patch -p0 < libpng_support_macos_10.11.patch
./configure --enable-static=yes --enable-shared=no --prefix=/usr/local
make
sudo make install
unset CFLAGS
unset LDFLAGS


# libjpeg-turbo 2.0.0 or later from libjpeg-turbo.org
# https://sourceforge.net/projects/libjpeg-turbo/files/2.0.2/
tar -xvf libjpeg-turbo-2.0.2.tar.gz
mkdir buildjt
cd buildjt
cmake -G"Unix Makefiles" -DCMAKE_INSTALL_PREFIX=/usr/local -DENABLE_SHARED=0 -DCMAKE_OSX_DEPLOYMENT_TARGET=10.14 \
  -DCMAKE_C_FLAGS_RELEASE="-O3 -mmacosx-version-min=10.14 -Werror=partial-availability" ../libjpeg-turbo-2.0.2/
make
sudo make install


# Building Qt6.2.2 from source
# -----------------------------

# For: PySide - https://download.qt.io/official_releases/QtForPython/


# download qt-everywhere-src-6.2.2.tar.xz directly from Qt
# from:  http://download.qt.io/archive/qt/

# and then unpack it
# Note to get unxz - you may need to download and build xz-5.2.5.tar.gz
# see the docs on building a relocatable python for instruction on building xz

unxz qt-everywhere-src-6.2.2.tar.xz
tar -xvf qt-everywhere-src-6.2.2.tar

cd qt-everywhere-src-6.2.2

# now copy 5 required patches from Sigil/docs/ into this directory

# cp YOUR_PATH_TO_SIGIL_SRC_TREE/Sigil/docs/qt622_avoid_qtabbar_segfault.patch ./
# cp YOUR_PATH_TO_SIGIL_SRC_TREE/Sigil/docs/qt622_fix_h6_insertParagraph.patch ./
# cp YOUR_PATH_TO_SIGIL_SRC_TREE/Sigil/docs/qt622_fix_missing_macos_menubar.patch ./
# cp YOUR_PATH_TO_SIGIL_SRC_TREE/Sigil/docs/qt622_fix_qiosurfacegraphicsbuffer.h.patch ./
# cp YOUR_PATH_TO_SIGIL_SRC_TREE/Sigil/docs/qt622_post_install_macos_ignore_bad_cups_cmake_find_failure.patch ./

# apply mouse press and flick on qtabbar tab fix to prevent segfault
# See https://bugreports.qt.io/browse/QTBUG-74478
patch -p0 < ./qt622_avoid_qtabbar_segfault.patch

# then apply an obvious fix for insertParagraph execcommand and h6 (see w3c spec)
# See https://bugreports.qt.io/browse/QTBUG-79778
patch -p0 < ./qt622_fix_h6_insertParagraph.patch

# the remaining patches are ONLY important for Qt on macOS

# apply workaround to prevent missing macos application menu items
# See https://bugreports.qt.io/browse/QTBUG-80795
patch -p0 < ./qt622_fix_missing_macos_menubar.patch

# apply a patch to fix missing headers in macOS Monterey and later only
patch -p0 < ./qt622_fix_qiosurfacegraphicsbuffer.h.patch

# The last patch is a generated cmake file fix and it must be used to fix the cmake
# file *AFTER* the Qt6 is built and installed

# this is the new minimum supported by Qt
export MACOSX_DEPLOYMENT_TARGET=10.14

# Create a destination directory to house your complete Qt binary in your home directory
# to be similar to how stock Qt does it
cd ~/
mkdir Qt622

# Now return and create a shadow build inside a new directory to keep your Qt sources clean
cd ${MYQTSRC}
mkdir build622
cd buildqt622


# Remember to include the -webengine-proprietary-codecs configure switch

../qt-everywhere-src-6.2.2/configure --prefix=/Users/${USER}/Qt622 -webengine-proprietary-codecs -DCMAKE_OSX_DEPLOYMENT_TARGET="10.14"

# note the build itself can take a couple of hours depending on memory available, disk and cpus used
cmake --build . --parallel
cmake --install .

# Now apply the final patch to the post installed cmake file
cd /Users/${USER}/Qt622
patch -p0 < qt622_post_install_macos_ignore_bad_cups_cmake_find_failure.patch

# After the install phase completes your newly built Qt should exist in ~/Qt622 ready to be used
# to build Sigil and PageEdit
