#!/bin/bash
# $Id: calibre.SlackBuild,v 1.245 2023/04/27 19:17:31 root Exp root $
# Copyright 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023  Eric Hameleers, Eindhoven, NL
# All rights reserved.
#
#   Permission to use, copy, modify, and distribute this software for
#   any purpose with or without fee is hereby granted, provided that
#   the above copyright notice and this permission notice appear in all
#   copies.
#
#   THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
#   WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
#   MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
#   IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
#   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
#   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
#   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
#   USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
#   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
#   OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
#   OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
#   SUCH DAMAGE.
# -----------------------------------------------------------------------------
#
# Slackware SlackBuild script 
# ===========================
# By:         Eric Hameleers <alien@slackware.com>
# For:        calibre
# Descr:      e-book library management application
# URL:        http://calibre-ebook.com/
# Build needs:
# Needs:      
# Changelog:  
# 0.7.20-1:   25/Sep/2010 by Eric Hameleers <alien@slackware.com>
#             * Initial build.
# 1.0.0-1:    23/aug/2013 by Eric Hameleers <alien@slackware.com>
#             * Finally, 1.0.0 ! With python-apsw as a new dependency.
# 1.49.0-1:   15/aug/2014 by Eric Hameleers <alien@slackware.com>
#             * Last version in the 1.x series.
# 2.28.0-1:   25/may/2015 by Eric Hameleers <alien@slackware.com>
#             * First build of the Qt5 based 2.x series.
# 2.30.0-1:   05/jun/2015 by Eric Hameleers <alien@slackware.com>
#             * Update.
# 2.31.0-1:   15/jul/2015 by Eric Hameleers <alien@slackware.com>
#             * Update.
# 2.32.1-1:   20/jul/2015 by Eric Hameleers <alien@slackware.com>
#             * Update.
# 2.33.0-1:   05/aug/2015 by Eric Hameleers <alien@slackware.com>
#             * Update.
# 2.35.0-1:   14/aug/2015 by Eric Hameleers <alien@slackware.com>
#             * Update.
# 2.37.0-1:   04/sep/2015 by Eric Hameleers <alien@slackware.com>
#             * Update. Removed BeautifulSoup as dependency. Minimal required
#               version of Python becomes 2.7.9.
# 2.37.1-1:   07/sep/2015 by Eric Hameleers <alien@slackware.com>
#             * Emergency bugfix release.
# 2.39.0-1:   25/sep/2015 by Eric Hameleers <alien@slackware.com>
#             * Update.
# 2.44.1-1:   22/nov/2015 by Eric Hameleers <alien@slackware.com>
#             * Update.
# 2.45.0-1:   02/dec/2015 by Eric Hameleers <alien@slackware.com>
#             * Update.
# 2.50.1-1:   01/feb/2016 by Eric Hameleers <alien@slackware.com>
#             * Update.
# 2.52.0-1:   05/mar/2016 by Eric Hameleers <alien@slackware.com>
#             * Update.
# 2.56.0-1:   12/may/2016 by Eric Hameleers <alien@slackware.com>
#             * Update.
# 2.61.0-1:   03/jul/2016 by Eric Hameleers <alien@slackware.com>
#             * Update.
# 2.71.0-1:   07/nov/2016 by Eric Hameleers <alien@slackware.com>
#             * Update.
# 2.75.1-1:   27/dec/2016 by Eric Hameleers <alien@slackware.com>
#             * Update.
# 2.79.1-1:   13/feb/2017 by Eric Hameleers <alien@slackware.com>
#             * Update.
# 3.1.1-1:    19/jun/2017 by Eric Hameleers <alien@slackware.com>
#             * New major release 3.x.
# 3.4.0-1:    16/jul/2017 by Eric Hameleers <alien@slackware.com>
#             * Update.
# 3.6.0-1:    06/aug/2017 by Eric Hameleers <alien@slackware.com>
#             * Update.
# 3.7.0-1:    12/sep/2017 by Eric Hameleers <alien@slackware.com>
#             * Update.
# 3.9.0-1:    13/oct/2017 by Eric Hameleers <alien@slackware.com>
#             * Update.
# 3.12.0-1:   20/nov/2017 by Eric Hameleers <alien@slackware.com>
#             * Update.
# 3.13.0-1:   08/dec/2017 by Eric Hameleers <alien@slackware.com>
#             * Update.
# 3.18.0-1:   07/mar/2018 by Eric Hameleers <alien@slackware.com>
#             * Update.
# 3.20.0-1:   02/apr/2018 by Eric Hameleers <alien@slackware.com>
#             * Update.
# 3.23.0-1:   06/may/2018 by Eric Hameleers <alien@slackware.com>
#             * Update.
# 3.23.0-2:   23/may/2018 by Eric Hameleers <alien@slackware.com>
#             * Rebuilt for new poppler in -current.
# 3.30.0-1:   24/aug/2018 by Eric Hameleers <alien@slackware.com>
#             * Update.  Note that Calibre won't compile against Qt 5.11.x
#               so for slackware-current internal Qt 5.9 libraries are added.
# 3.32.0-1:   30/sep/2018 by Eric Hameleers <alien@slackware.com>
#             * Update.
# 3.33.1-1:   21/oct/2018 by Eric Hameleers <alien@slackware.com>
#             * Update due to icu4c update in -current.
# 3.38.0-1:   18/jan/2019 by Eric Hameleers <alien@slackware.com>
#             * Update.
# 3.38.1-1:   19/jan/2019 by Eric Hameleers <alien@slackware.com>
#             * Update.
# 3.40.1-1:   09/mar/2019 by Eric Hameleers <alien@slackware.com>
#             * Update.
# 3.46.0-1:   27/jul/2019 by Eric Hameleers <alien@slackware.com>
#             * Update.
# 3.47.1-1:   08/sep/2019 by Eric Hameleers <alien@slackware.com>
#             * Update.
# 4.2.0-1:    19/oct/2019 by Eric Hameleers <alien@slackware.com>
#             * New major release 4.x. No more qt-webkit.
# 4.7.0-1:    30/dec/2019 by Eric Hameleers <alien@slackware.com>
#             * Update.
# 4.11.2-1:   05/mar/2020 by Eric Hameleers <alien@slackware.com>
#             * Update.
# 4.12.0-1:   06/mar/2020 by Eric Hameleers <alien@slackware.com>
#             * Update.
# 4.15.0-1:   07/may/2020 by Eric Hameleers <alien@slackware.com>
#             * Update.
# 5.38.0-1:   07/mar/2022 by Eric Hameleers <alien@slackware.com>
#             * Update.
#               The embedded Python interpreter and modules will now always
#               be built. Qt5 libraries are expected to be supplied by
#               the OS, meaning Slackware older than 15.0 is not supported.
#               Python3 is now powering Calibre.
# 5.39.0-1:   18/mar/2022 by Eric Hameleers <alien@slackware.com>
#             * Update.
# 5.43.0-1:   30/may/2022 by Eric Hameleers <alien@slackware.com>
#             * Update.
# 5.44.0-1:   12/oct/2022 by Eric Hameleers <alien@slackware.com>
#             * Update. Final 5.x release, Calibre 6.x is built on top of Qt6.
# 6.7.1-1:    18/oct/2022 by Eric Hameleers <alien@slackware.com>
#             * Calibre6 is built on Qt6.
# 6.11.0-1:   24/feb/2023 by Eric Hameleers <alien@slackware.com>
#             * Update.
#               Note that sources for 6.12.0 and up no longer ship some
#               required files. SlackBuild needs to be re-worked to cope.
# 6.14.1-1:   02/apr/2023 by Eric Hameleers <alien@slackware.com>
#             * Update.
# 6.15.1-1:   08/apr/2023 by Eric Hameleers <alien@slackware.com>
#             * Update.
# 6.16.0-1:   21/apr/2023 by Eric Hameleers <alien@slackware.com>
#             * Update.
# 6.17.0-1:   27/apr/2023 by Eric Hameleers <alien@slackware.com>
#             * Update.
# 
# Run 'sh calibre.SlackBuild' to build a Slackware package.
# The package (.txz) and .txt file as well as build logs are created in /tmp .
# Install it using 'installpkg'. 
#
# -----------------------------------------------------------------------------

PRGNAM=calibre
SRCNAM=calibre
VERSION=${VERSION:-6.17.0}
BUILD=${BUILD:-1}
NUMJOBS=${NUMJOBS:-" -j$(nproc) "}
TAG=${TAG:-alien}

DOCS="LICENSE* Changelog* COPYRIGHT README*"

SYSPYTHON=$(python3 -c 'import sys; print (sys.version.split( )[0])')
SLACKVER=${SLACKVER:-$(cat /etc/slackware-version |cut -d' ' -f2)}

REQUIRED_QT="6.4.2"

# Only used in case we need to build our own Qt:
INT_QT=6.4.3

REQUIRED_MTP="1.1.20"

# Only used in case we need to build our own libmtp:
INT_MTP=1.1.20

# Only used when we build our own ImageMagick:
INT_MAGICK=6.9.10_68

REQUIRED_PYTHON="3.10"
REQUIRED_PYTHON_MIN="1"

# Only used in case we need to build our own python:
INT_PYTHON=3.10.11

# Only used in case we need to build our own python modules:
INT_SETUPTOOLS=57.4.0
# The rest of the internal Python deps:
INT_APSW=3.37.0-r1
INT_BEAUTIFULSOUP=4.11.1
INT_CHARDET=4.0.0
INT_CSSPARSER=1.0.8
INT_DATEUTIL=2.8.2
INT_DNSPYTHON=2.1.0
INT_FEEDPARSER=6.0.8
INT_FONTTOOLS=4.39.3
INT_HTML2TEXT=2020.1.16
INT_HTML5LIB=1.1
INT_HTML5PARSER=0.4.10
INT_HYPHEN=2.8.8
INT_IFADDR=0.1.7
INT_JEEPNEY=0.7.1
INT_LXML=4.9.1
INT_MARKDOWN=3.3.6
INT_MECHANIZE=0.4.7
INT_MSGPACK=1.0.3
INT_MULTIVOLUMEFILE=0.2.3
INT_NETIFACES=0.11.0
INT_PACKAGING=21.3
INT_PILLOW=8.4.0
INT_PIP=20.0.2
INT_PLY=3.11
INT_PSUTIL=5.8.0
INT_PY7ZR=0.16.3
INT_PYBROTLI=1.0.9
INT_PYCHM=0.8.6
INT_PYCRYPTODOME=3.11.0
INT_PYGMENTS=2.10.0
INT_PYPARSING=3.0.6
INT_PYPPMD=0.17.3
INT_PYQT6=6.4.2
INT_PYQT6SIP=13.4.0
INT_PYQTBUILDER=1.14.1
INT_PYQTWEBENG=6.4.0
INT_PYZSTD=0.15.6
INT_REGEX=2021.11.10
INT_SGMLLIB3K=1.0.0
INT_SIP=6.7.7
INT_SIX=1.16.0
INT_SOUPSIEVE=2.3.1
INT_SPEECHD=0.11.4
INT_STEMMER=2.2.0
INT_SQLITE=3410200
INT_TEXTTABLE=1.6.4
INT_TOML=0.10.2
INT_UCHARDET=0.0.7
INT_UNRARDLL=0.1.7
INT_WEBENC=0.5.1
INT_ZEROCONF=0.37.0

# Software that's an internal dependency to the package:
INT_HUNSPELL=1.7.2
INT_HYPHENATION=master # VERSION is in ./setup/hyphenation.py
INT_MATHJAX=3.1.4      # VERSION is in ./setup/mathjax.py
INT_OPTIPNG=0.7.7
INT_PODOFO=0.9.7
INT_POPPLER=21.11.0
INT_UNRARSRC=6.2.6

# Where do we look for sources?
SRCDIR=$(cd $(dirname $0); pwd)
PATCHDIR=${SRCDIR}/patches

# Place to build (TMP) package (PKG) and output (OUTPUT) the program:
TMP=${TMP:-/tmp/build}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}

SOURCE[0]="$SRCDIR/sources/${SRCNAM}-${VERSION}.tar.xz"
SRCURL[0]="https://download.calibre-ebook.com/${VERSION}/${SRCNAM}-${VERSION}.tar.xz"

# We build our own python 3.x plus supporting modules:
BUILD_PYTHON="YES"

# Allow the package builder to override BUILD_MAGICK:
# By default we do not compile an internal version but enabling this
# allows us to be independant of Slackware's ImageMagick upgrades.
BUILD_MAGICK=${BUILD_MAGICK:-NO}

# Sometimes we need to generate a new user-agent-strings file:
BUILD_NEWUAS=${BUILD_NEWUAS:-NO}

# Allow the package builder to override BUILD_QT:
if [ -z "$BUILD_QT" ]; then
  if pkg-config --exists "Qt6Core >= $REQUIRED_QT" && pkg-config --exists "Qt6Core <= $INT_QT" ;
  then
    BUILD_QT="NO"
  else
    # We need to build our own qt:
    BUILD_QT="YES"
  fi
fi

# Allow the package builder to override BUILD_MTP:
if [ -z "$BUILD_MTP" ]; then
  if pkg-config --exists "libmtp >= $REQUIRED_MTP" ; then
    BUILD_MTP="NO"
  else
    # We need to build our own libmtp:
    BUILD_MTP="YES"
  fi
fi

# Determine what sources we need to download:
echo ">> Compiling python modules <<"

SOURCE[1]="$SRCDIR/sources/setuptools-${INT_SETUPTOOLS}.tar.gz"
SRCURL[1]="https://pypi.python.org/packages/source/s/setuptools/setuptools-${INT_SETUPTOOLS}.tar.gz"

SOURCE[2]="$SRCDIR/sources/Pygments-${INT_PYGMENTS}.tar.gz"
SRCURL[2]="https://pypi.python.org/packages/source/P/Pygments/Pygments-${INT_PYGMENTS}.tar.gz"

SOURCE[3]="$SRCDIR/sources/dnspython-${INT_DNSPYTHON}.zip"
SRCURL[3]="https://pypi.python.org/packages/source/d/dnspython/dnspython-${INT_DNSPYTHON}.zip"

SOURCE[4]="$SRCDIR/sources/css-parser-${INT_CSSPARSER}.tar.gz"
SRCURL[4]="https://pypi.python.org/packages/source/c/css-parser/css-parser-${INT_CSSPARSER}.tar.gz"

SOURCE[5]="$SRCDIR/sources/python-dateutil-${INT_DATEUTIL}.tar.gz"
SRCURL[5]="https://pypi.python.org/packages/source/p/python-dateutil/python-dateutil-${INT_DATEUTIL}.tar.gz"

SOURCE[6]="$SRCDIR/sources/Pillow-${INT_PILLOW}.tar.gz"
SRCURL[6]="https://pypi.io/packages/source/p/pillow/Pillow-${INT_PILLOW}.tar.gz"

SOURCE[7]="$SRCDIR/sources/lxml-${INT_LXML}.tar.gz"
SRCURL[7]="https://pypi.io/packages/source/l/lxml/lxml-${INT_LXML}.tar.gz"

SOURCE[8]="$SRCDIR/sources/mechanize-${INT_MECHANIZE}.tar.gz"
SRCURL[8]="https://github.com/python-mechanize/mechanize/archive/v${INT_MECHANIZE}.tar.gz"

SOURCE[9]="$SRCDIR/sources/texttable-${INT_TEXTTABLE}.tar.gz"
SRCURL[9]="https://pypi.io/packages/source/t/texttable/texttable-${INT_TEXTTABLE}.tar.gz"

SOURCE[10]="$SRCDIR/sources/ifaddr-${INT_IFADDR}.tar.gz"
SRCURL[10]="https://pypi.io/packages/source/i/ifaddr/ifaddr-${INT_IFADDR}.tar.gz"

SOURCE[11]="$SRCDIR/sources/zeroconf-${INT_ZEROCONF}.tar.gz"
SRCURL[11]="https://pypi.io/packages/source/z/zeroconf/zeroconf-${INT_ZEROCONF}.tar.gz"

SOURCE[12]="$SRCDIR/sources/pycryptodome-${INT_PYCRYPTODOME}.tar.gz"
SRCURL[12]="https://github.com/Legrandin/pycryptodome/archive/v${INT_PYCRYPTODOME}.tar.gz"

SOURCE[13]="$SRCDIR/sources/netifaces-${INT_NETIFACES}.tar.gz"
SRCURL[13]="https://pypi.io/packages/source/n/netifaces/netifaces-${INT_NETIFACES}.tar.gz"

SOURCE[14]="$SRCDIR/sources/psutil-${INT_PSUTIL}.tar.gz"
SRCURL[14]="https://github.com/giampaolo/psutil/archive/release-${INT_PSUTIL}.tar.gz"

SOURCE[15]="$SRCDIR/sources/apsw-${INT_APSW}.zip"
SRCURL[15]="https://github.com/rogerbinns/apsw/releases/download/${INT_APSW}/apsw-${INT_APSW}.zip"

SOURCE[16]="$SRCDIR/sources/regex-${INT_REGEX}.tar.gz"
SRCURL[16]="https://pypi.io/packages/source/r/regex/regex-${INT_REGEX}.tar.gz"

SOURCE[17]="$SRCDIR/sources/msgpack-python-${INT_MSGPACK}.tar.gz"
SRCURL[17]="https://pypi.io/packages/source/m/msgpack/msgpack-${INT_MSGPACK}.tar.gz"

SOURCE[18]="$SRCDIR/sources/six-${INT_SIX}.tar.gz"
SRCURL[18]="https://pypi.io/packages/source/s/six/six-${INT_SIX}.tar.gz"

SOURCE[19]="$SRCDIR/sources/uchardet-${INT_UCHARDET}.tar.xz"
SRCURL[19]="https://www.freedesktop.org/software/uchardet/releases/uchardet-${INT_UCHARDET}.tar.xz"

SOURCE[20]="$SRCDIR/sources/webencodings-${INT_WEBENC}.tar.gz"
SRCURL[20]="https://pypi.io/packages/source/w/webencodings/webencodings-${INT_WEBENC}.tar.gz"

SOURCE[21]="$SRCDIR/sources/html5lib-${INT_HTML5LIB}.tar.gz"
SRCURL[21]="https://pypi.io/packages/source/h/html5lib/html5lib-${INT_HTML5LIB}.tar.gz"

SOURCE[22]="$SRCDIR/sources/html5-parser-${INT_HTML5PARSER}.tar.gz"
SRCURL[22]="https://pypi.io/packages/source/h/html5-parser/html5-parser-${INT_HTML5PARSER}.tar.gz"

SOURCE[23]="$SRCDIR/sources/unrardll-${INT_UNRARDLL}.tar.gz"
SRCURL[23]="https://pypi.io/packages/source/u/unrardll/unrardll-${INT_UNRARDLL}.tar.gz"

SOURCE[24]="$SRCDIR/sources/feedparser-${INT_FEEDPARSER}.tar.gz"
SRCURL[24]="https://pypi.io/packages/source/f/feedparser/feedparser-${INT_FEEDPARSER}.tar.gz"

SOURCE[25]="$SRCDIR/sources/Markdown-${INT_MARKDOWN}.tar.gz"
SRCURL[25]="https://pypi.io/packages/source/M/Markdown/Markdown-${INT_MARKDOWN}.tar.gz"

SOURCE[26]="$SRCDIR/sources/sqlite-amalgamation-${INT_SQLITE}.zip"
SRCURL[26]="https://www.sqlite.org/2023/sqlite-amalgamation-${INT_SQLITE}.zip"

SOURCE[27]="$SRCDIR/sources/beautifulsoup4-${INT_BEAUTIFULSOUP}.tar.gz"
SRCURL[27]="https://pypi.io/packages/source/b/beautifulsoup4/beautifulsoup4-${INT_BEAUTIFULSOUP}.tar.gz"

SOURCE[28]="$SRCDIR/sources/snowball-${INT_STEMMER}.tar.gz"
SRCURL[28]="https://github.com/snowballstem/snowball/archive/refs/tags/v${INT_STEMMER}.tar.gz"

SOURCE[29]="$SRCDIR/sources/soupsieve-${INT_SOUPSIEVE}.tar.gz"
SRCURL[29]="https://pypi.io/packages/source/s/soupsieve/soupsieve-${INT_SOUPSIEVE}.tar.gz"

SOURCE[30]="$SRCDIR/sources/html2text-${INT_HTML2TEXT}.tar.gz"
SRCURL[30]="https://pypi.io/packages/source/h/html2text/html2text-${INT_HTML2TEXT}.tar.gz"

SOURCE[31]="$SRCDIR/sources/chardet-${INT_CHARDET}.tar.gz"
SRCURL[31]="https://pypi.io/packages/source/c/chardet/chardet-${INT_CHARDET}.tar.gz"

SOURCE[32]="$SRCDIR/sources/pychm-${INT_PYCHM}.tar.gz"
SRCURL[32]="https://pypi.io/packages/source/p/pychm/pychm-${INT_PYCHM}.tar.gz"

SOURCE[33]="$SRCDIR/sources/toml-${INT_TOML}.tar.gz"
SRCURL[33]="https://pypi.io/packages/source/t/toml/toml-${INT_TOML}.tar.gz"

SOURCE[34]="$SRCDIR/sources/PyQt6_WebEngine-${INT_PYQTWEBENG}.tar.gz"
SRCURL[34]="https://pypi.io/packages/source/P/PyQt6_WebEngine/PyQt6_WebEngine-${INT_PYQTWEBENG}.tar.gz"

SOURCE[35]="$SRCDIR/sources/unrarsrc-${INT_UNRARSRC}.tar.gz"
SRCURL[35]="http://www.rarlab.com/rar/unrarsrc-${INT_UNRARSRC}.tar.gz"

SOURCE[36]="$SRCDIR/sources/hunspell-${INT_HUNSPELL}.tar.gz"
SRCURL[36]="https://github.com/hunspell/hunspell/archive/v${INT_HUNSPELL}.tar.gz"

SOURCE[37]="$SRCDIR/sources/pip-${INT_PIP}.tar.gz"
SRCURL[37]="https://pypi.io/packages/source/p/pip/pip-${INT_PIP}.tar.gz"

SOURCE[38]="$SRCDIR/sources/sgmllib3k-${INT_SGMLLIB3K}.tar.gz"
SRCURL[38]="https://pypi.io/packages/source/s/sgmllib3k/sgmllib3k-${INT_SGMLLIB3K}.tar.gz"

SOURCE[39]="$SRCDIR/sources/py7zr-${INT_PY7ZR}.tar.gz"
SRCURL[39]="https://pypi.io/packages/source/p/py7zr/py7zr-${INT_PY7ZR}.tar.gz"

SOURCE[40]="$SRCDIR/sources/jeepney-${INT_JEEPNEY}.tar.gz"
SRCURL[40]="https://pypi.io/packages/source/j/jeepney/jeepney-${INT_JEEPNEY}.tar.gz"

SOURCE[41]="$SRCDIR/sources/pyparsing-${INT_PYPARSING}.tar.gz"
SRCURL[41]="https://pypi.io/packages/source/p/pyparsing/pyparsing-${INT_PYPARSING}.tar.gz"

SOURCE[42]="$SRCDIR/sources/ply-${INT_PLY}.tar.gz"
SRCURL[42]="https://pypi.io/packages/source/p/ply/ply-${INT_PLY}.tar.gz"

SOURCE[43]="$SRCDIR/sources/packaging-${INT_PACKAGING}.tar.gz"
SRCURL[43]="https://pypi.io/packages/source/p/packaging/packaging-${INT_PACKAGING}.tar.gz"

SOURCE[44]="$SRCDIR/sources/sip-${INT_SIP}.tar.gz"
SRCURL[44]="https://pypi.io/packages/source/s/sip/sip-${INT_SIP}.tar.gz"

SOURCE[45]="$SRCDIR/sources/PyQt6_sip-${INT_PYQT6SIP}.tar.gz"
SRCURL[45]="https://pypi.io/packages/source/P/PyQt6_sip/PyQt6_sip-${INT_PYQT6SIP}.tar.gz"

SOURCE[46]="$SRCDIR/sources/PyQt6-${INT_PYQT6}.tar.gz"
SRCURL[46]="https://pypi.io/packages/source/P/PyQt6/PyQt6-${INT_PYQT6}.tar.gz"

SOURCE[47]="$SRCDIR/sources/PyQt-builder-${INT_PYQTBUILDER}.tar.gz"
SRCURL[47]="https://pypi.io/packages/source/P/PyQt-builder/PyQt-builder-${INT_PYQTBUILDER}.tar.gz"

SOURCE[48]="$SRCDIR/sources/speech-dispatcher-${INT_SPEECHD}.tar.gz"
SRCURL[48]="https://github.com/brailcom/speechd/releases/download/${INT_SPEECHD}/speech-dispatcher-${INT_SPEECHD}.tar.gz"

SOURCE[49]="$SRCDIR/sources/multivolumefile-${INT_MULTIVOLUMEFILE}.tar.gz"
SRCURL[49]="https://pypi.io/packages/source/m/multivolumefile/multivolumefile-${INT_MULTIVOLUMEFILE}.tar.gz"

SOURCE[50]="$SRCDIR/sources/Brotli-${INT_PYBROTLI}.zip"
SRCURL[50]="https://pypi.io/packages/source/B/Brotli/Brotli-${INT_PYBROTLI}.zip"

SOURCE[51]="$SRCDIR/sources/pyzstd-${INT_PYZSTD}.tar.gz"
SRCURL[51]="https://pypi.io/packages/source/p/pyzstd/pyzstd-${INT_PYZSTD}.tar.gz"

SOURCE[52]="$SRCDIR/sources/pyppmd-${INT_PYPPMD}.tar.gz"
SRCURL[52]="https://pypi.io/packages/source/p/pyppmd/pyppmd-${INT_PYPPMD}.tar.gz"

SOURCE[53]="$SRCDIR/sources/fonttools-${INT_FONTTOOLS}.zip"
SRCURL[53]="https://pypi.io/packages/source/f/fonttools/fonttools-${INT_FONTTOOLS}.zip"

NEXT_ARRAYEL=${#SOURCE[@]}

# We always build the python interpreter:
echo ">> Compiling python interpreter <<"

SOURCE[$NEXT_ARRAYEL]="$SRCDIR/sources/Python-${INT_PYTHON}.tar.xz"
SRCURL[$NEXT_ARRAYEL]="http://python.org/ftp/python/${INT_PYTHON}/Python-${INT_PYTHON}.tar.xz"

NEXT_ARRAYEL=$(( ${NEXT_ARRAYEL} + 1 ))

if [ "$BUILD_MTP" = "YES" ]; then
  echo ">> Compiling libmtp <<"

  SOURCE[$NEXT_ARRAYEL]="$SRCDIR/sources/libmtp-${INT_MTP}.tar.gz"
  SRCURL[$NEXT_ARRAYEL]="https://downloads.sourceforge.net/libmtp/libmtp-${INT_MTP}.tar.gz"

  NEXT_ARRAYEL=$(( ${NEXT_ARRAYEL} + 1 ))
fi

if [ "$BUILD_QT" = "YES" ]; then
  echo ">> Compiling Qt  <<"

  SOURCE[$NEXT_ARRAYEL]="$SRCDIR/sources/qt-everywhere-src-${INT_QT}.tar.xz"
  SRCURL[$NEXT_ARRAYEL]="http://download.qt.io/official_releases/qt/$(echo ${INT_QT}|cut -d. -f1,2)/${INT_QT}/single/qt-everywhere-src-${INT_QT}.tar.xz"

  NEXT_ARRAYEL=$(( ${NEXT_ARRAYEL} + 1 ))
fi

if [ "$BUILD_MAGICK" = "YES" ]; then
  echo ">> Compiling Magick  <<"

  SOURCE[$NEXT_ARRAYEL]="$SRCDIR/sources/ImageMagick-${INT_MAGICK}.tar.xz"
  SRCURL[$NEXT_ARRAYEL]="http://www.imagemagick.org/download/releases/ImageMagick-${INT_MAGICK}.tar.xz"

  NEXT_ARRAYEL=$(( ${NEXT_ARRAYEL} + 1 ))
fi

# Several internal dependencies:
SOURCE[$NEXT_ARRAYEL]="$SRCDIR/sources/optipng-${INT_OPTIPNG}.tar.gz"
SRCURL[$NEXT_ARRAYEL]="https://downloads.sourceforge.net/optipng/optipng-${INT_OPTIPNG}.tar.gz"
NEXT_ARRAYEL=$(( ${NEXT_ARRAYEL} + 1 ))

SOURCE[$NEXT_ARRAYEL]="$SRCDIR/sources/podofo-${INT_PODOFO}.tar.gz"
SRCURL[$NEXT_ARRAYEL]="https://downloads.sourceforge.net/podofo/podofo-${INT_PODOFO}.tar.gz"
NEXT_ARRAYEL=$(( ${NEXT_ARRAYEL} + 1 ))

SOURCE[$NEXT_ARRAYEL]="$SRCDIR/sources/hyphen-${INT_HYPHEN}.tar.gz"
SRCURL[$NEXT_ARRAYEL]="https://downloads.sourceforge.net/hunspell/hyphen-${INT_HYPHEN}.tar.gz"
NEXT_ARRAYEL=$(( ${NEXT_ARRAYEL} + 1 ))

SOURCE[$NEXT_ARRAYEL]="$SRCDIR/sources/dictionaries-${INT_HYPHENATION}.tar.gz"
SRCURL[$NEXT_ARRAYEL]="https://github.com/LibreOffice/dictionaries/archive/${INT_HYPHENATION}.tar.gz"
NEXT_ARRAYEL=$(( ${NEXT_ARRAYEL} + 1 ))

SOURCE[$NEXT_ARRAYEL]="$SRCDIR/sources/mathjax-${INT_MATHJAX}.tar.gz"
SRCURL[$NEXT_ARRAYEL]="https://github.com/mathjax/MathJax/archive/${INT_MATHJAX}.tar.gz"
NEXT_ARRAYEL=$(( ${NEXT_ARRAYEL} + 1 ))

SOURCE[$NEXT_ARRAYEL]="$SRCDIR/sources/mozilla-ca-certs.pem"
SRCURL[$NEXT_ARRAYEL]="https://curl.se/ca/cacert.pem"
NEXT_ARRAYEL=$(( ${NEXT_ARRAYEL} + 1 ))

##
## --- with a little luck, you won't have to edit below this point --- ##
##

# Automatically determine the architecture we're building on:
MARCH=$( uname -m )
if [ -z "$ARCH" ]; then
  case "$MARCH" in
    i?86)    export ARCH=i586 ;;
    armv7hl) export ARCH=$MARCH ;;
    arm*)    export ARCH=arm ;;
    # Unless $ARCH is already set, use uname -m for all other archs:
    *)       export ARCH=$MARCH ;;
  esac
fi

case "$ARCH" in
  i?86)      SLKCFLAGS="-O2 -march=${ARCH} -mtune=i686"
             SLKLDFLAGS=""; LIBDIRSUFFIX=""
             ;;
  x86_64)    SLKCFLAGS="-O2 -fPIC"
             SLKLDFLAGS="-L/usr/lib64"; LIBDIRSUFFIX="64"
             ;;
  armv7hl)   SLKCFLAGS="-O2 -march=armv7-a -mfpu=vfpv3-d16"
             SLKLDFLAGS=""; LIBDIRSUFFIX=""
             ;;
  *)         SLKCFLAGS="-O2"
             SLKLDFLAGS=""; LIBDIRSUFFIX=""
             ;;
esac

case "$ARCH" in
    arm*)    TARGET=$ARCH-slackware-linux-gnueabi ;;
    *)       TARGET=$ARCH-slackware-linux ;;
esac

# Exit the script on errors:
set -e
trap 'echo "$0 FAILED at line ${LINENO}" | tee $OUTPUT/error-${PRGNAM}.log' ERR
# Catch unitialized variables:
set -u
P1=${1:-1}

# Save old umask and set to 0022:
_UMASK_=$(umask)
umask 0022

# Create working directories:
mkdir -p $OUTPUT          # place for the package to be saved
mkdir -p $TMP/tmp-$PRGNAM # location to build the source
mkdir -p $PKG             # place for the package to be built

if [ "$P1" != "--oldbuild" -a  "$P1" != "--download" ]; then
  # If the "--oldbuild" parameter is present, we keep
  #  the old build files and continue;
  # By default we remove the remnants of previous build and continue:
  echo -e "**\n**  Cleaning up old build ...\n**"
  rm -rf $PKG/*             # always erase old package's contents
  rm -rf $TMP/tmp-$PRGNAM/* # remove the remnants of previous build
  rm -rf $OUTPUT/{configure,make,install,error,makepkg}-$PRGNAM.log
                            # remove old log files
fi

# Source file availability:
for (( i = 0; i < ${#SOURCE[*]}; i++ )) ; do
  if ! [ -f ${SOURCE[$i]} ]; then
    echo "Source '$(basename ${SOURCE[$i]})' not available yet..."
    # Check if the $SRCDIR is writable at all - if not, download to $OUTPUT
    [ -w "$SRCDIR" ] || SOURCE[$i]="$OUTPUT/$(basename ${SOURCE[$i]})"
    if [ -f ${SOURCE[$i]} ]; then echo "Ah, found it!"; continue; fi
    if ! [ "x${SRCURL[$i]}" == "x" ]; then
      echo "Will download file to $(dirname $SOURCE[$i])"
      wget --no-check-certificate --content-disposition -nv -T 20 -O "${SOURCE[$i]}" "${SRCURL[$i]}" || true
      if [ $? -ne 0 -o ! -s "${SOURCE[$i]}" ]; then
        echo "Fail to download '$(basename ${SOURCE[$i]})'. Aborting the build."
        mv -f "${SOURCE[$i]}" "${SOURCE[$i]}".FAIL
        exit 1
      fi
    else
      echo "File '$(basename ${SOURCE[$i]})' not available. Aborting the build."
      exit 1
    fi
  fi
done

if [ "$P1" == "--download" ]; then
  echo "Download complete."
  exit 0
fi

# --- PACKAGE BUILDING ---

echo "++"
echo "|| $PRGNAM-$VERSION"
echo "++"

cd $TMP/tmp-$PRGNAM

if [ "$P1" != "--oldbuild" ]; then
  if [ "$BUILD_PYTHON" = "YES" -o "$BUILD_MTP" = "YES" -o  "$BUILD_QT" = "YES" -o "$BUILD_MAGICK" = "YES" ]; then
    # Sanity check:
    # In case we need to build an internal set of python interpreter plus
    # support modules, then you must not compile this package when calibre
    # is already installed!
    if [ -d /usr/lib${LIBDIRSUFFIX}/$PRGNAM/lib ]; then
      echo ""
      echo "** You have $PRGNAM installed in /usr/lib${LIBDIRSUFFIX}/$PRGNAM"
      echo "** Compiling this package means you have to remove the existing"
      echo "** $PRGNAM installation first, it conflicts with the compilation!"
      echo ""
      exit 1
    fi
  fi

  echo "Extracting the source archive(s) for $PRGNAM..."
  tar -xf ${SOURCE[0]}
  if [ $NEXT_ARRAYEL -gt 1 ]; then
  for (( i = 1; i < ${#SOURCE[*]}; i++ )) ; do
    echo "-- Also extracting dependency source $(basename ${SOURCE[$i]})..."
    if $(file ${SOURCE[$i]} | grep -qi ": zip") ; then
      unzip -q ${SOURCE[$i]}
    elif $(file ${SOURCE[$i]} | grep -qiw "text") ; then
      true
    else
      tar -xf ${SOURCE[$i]}
    fi
  done
  fi

  chown -R root:root .
  chmod -R u+w,go+r-w,a+X-s .
fi

echo Building ...

#
# What follows is a series of subroutines for building all the parts:
#

#
# Build Qt 6.x:
#
make_qt6() {

  # Calibre needs:
  # qt-base, qt-svg, qt-shadertools, qt-declarative, qt-imageformats,
  # qt-webchannel, qt-positioning, qt-wayland, qt-x11extras,
  # qt-sensors, qt-webengine.

  local MOD="qt6"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/qt-everywhere-src-${INT_QT}

  # If we build our own Qt, unset the QT-related environment variables,
  # so that a pre-existing Qt will not be picked up and create errors later:
  unset QTDIR
  unset QT6DIR
  NEWPATH="/usr/lib${LIBDIRSUFFIX}/${PRGNAM}/bin"
  for elem in $(echo $PATH | cut -d: --output-delimiter=' ' -f1-) ; do
    if ! $(echo "$elem"| grep -q /qt) ; then
      NEWPATH="$NEWPATH:$elem"
    fi
  done
  export PATH="$NEWPATH"

  # Use -reduce-relocations only on i?86 and x86_64 architextures.
  # https://bugreports.qt-project.org/browse/QTBUG-36129
  if echo $ARCH | grep -q '\(i.86\|x86_64\)' 2>/dev/null; then
    RELOCATIONS="-reduce-relocations"
  else
    RELOCATIONS=""
  fi

  if [ "$P1" != "--oldbuild" ]; then
    # Fix path to mysql header
    cat $PATCHDIR/qt5.mysql.h.diff | patch -p1 --verbose || exit 1

    if ! pkg-config --exists libpulse 2>/dev/null ; then
      # Forcibly disable pulseaudio in qtwebengine:
      cat $PATCHDIR/qt5.pulseaudio.diff | patch -p1 --verbose || exit 1
    fi
    # Use our custom compiler and linker flags:
    sed -e "s|^\(QMAKE_CFLAGS_RELEASE.*\)|\1 ${SLKCFLAGS}|" \
      -i qtbase/mkspecs/common/gcc-base.conf || exit 1
    sed -e "s|^\(QMAKE_LFLAGS_RELEASE.*\)|\1 ${SLKLDFLAGS}|" \
      -i qtbase/mkspecs/common/g++-unix.conf || exit 1
    # Re-add support for 32bit architectures - Google no longer supports it:
    sed -i qtwebengine/src/3rdparty/chromium/BUILD.gn \
      -e 's/target_os != "linux" || /target_os == "linux" || /'
    cd qtwebengine
      # Thanks Debian! See https://salsa.debian.org/qt-kde-team/qt6/qt6-webengine/-/tree/master/debian/patches
      cat $PATCHDIR/qt6-webengine_32bit_compressing_files.patch \
        | patch -p1 --verbose || exit 1
    cd - 1>/dev/null
  fi

  export CFLAGS="$SLKCFLAGS"
  export CXXFLAGS="$SLKCFLAGS"
  export OPENSOURCE_CXXFLAGS="$SLKCFLAGS"
  export QTDIR="${TMP}/qt-everywhere-src-${INT_QT}"
  export LD_LIBRARY_PATH="${QTDIR}/qtbase/lib:${QTDIR}/qttools/lib"
  export QT_PLUGIN_PATH="${QTDIR}/qtbase/plugins"
  mkdir -p build
  cd build
    cmake .. \
      -G Ninja \
      -Wno-dev \
      -DCMAKE_BUILD_TYPE=Release \
      -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \
      -DCMAKE_C_FLAGS_RELEASE:STRING="$SLKCFLAGS" \
      -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \
      -DCMAKE_CXX_FLAGS_RELEASE:STRING="$SLKCFLAGS" \
      -DCMAKE_INSTALL_PREFIX="/usr/lib${LIBDIRSUFFIX}/${PRGNAM}" \
      -DFEATURE_openssl_linked=ON \
      -DFEATURE_system_sqlite=OFF \
      -DFEATURE_system_xcb_xinput=ON \
      -DFEATURE_webengine_proprietary_codecs=ON \
      -DFEATURE_webengine_system_ffmpeg=OFF \
      -DQT_BUILD_EXAMPLES=OFF \
      -DQT_USE_CCACHE=OFF \
      -DBUILD_qt3d:BOOL=OFF \
      -DBUILD_qtactiveqt:BOOL=OFF \
      -DBUILD_qtcharts:BOOL=OFF \
      -DBUILD_qtconnectivity:BOOL=OFF \
      -DBUILD_qtdatavis3d:BOOL=OFF \
      -DBUILD_qtdoc:BOOL=OFF \
      -DBUILD_qtlottie:BOOL=OFF \
      -DBUILD_qtmqtt:BOOL=OFF \
      -DBUILD_qtmultimedia:BOOL=OFF \
      -DBUILD_qtnetworkauth:BOOL=OFF \
      -DBUILD_qtquick3d:BOOL=OFF \
      -DBUILD_qtquick3dphysics:BOOL=OFF \
      -DBUILD_qtquicktimeline:BOOL=OFF \
      -DBUILD_qtremoteobjects:BOOL=OFF \
      -DBUILD_qtscxml:BOOL=OFF \
      -DBUILD_qtserialbus:BOOL=OFF \
      -DBUILD_qtserialport:BOOL=OFF \
      -DBUILD_qttools:BOOL=OFF \
      -DBUILD_qttranslations:BOOL=OFF \
      2>&1 | tee $OUTPUT/configure-${PRGNAM}_${MOD}.log
    cmake --build . --parallel \
      2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log
    DESTDIR=$PKG cmake --install . --strip \
      2>&1 | tee $OUTPUT/install-${PRGNAM}_${MOD}.log
  cd - 1>/dev/null

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/${PRGNAM}/doc/internaldeps/${MOD}
  cp -a LICENSE* README* \
    $PKG/usr/lib${LIBDIRSUFFIX}/${PRGNAM}/doc/internaldeps/${MOD} || true

} # End make_qt6


#
# Build libmtp:
#
make_mtp() {

  local MOD="libmtp"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/libmtp-${INT_MTP}

  export CFLAGS="$SLKCFLAGS"
  ./configure \
    --prefix=/usr/lib${LIBDIRSUFFIX}/$PRGNAM \
    --disable-static

  # Build and install:
  make $NUMJOBS || make || exit 1
  make install DESTDIR=$PKG || exit 1

  # Guess someone didn't have enough to drink:
  ( cd $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/bin
    rm -f mtp-sendtr mtp-sendfile mtp-newfolder mtp-getfile mtp-delfile
    ln -s mtp-connect mtp-sendtr
    ln -s mtp-connect mtp-sendfile
    ln -s mtp-connect mtp-newfolder
    ln -s mtp-connect mtp-getfile
    ln -s mtp-connect mtp-delfile
  )

  # No need for this in the calibre package:
  rm -rf $PKG/lib $PKG/usr/lib/udev

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a README* \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_libmtp


#
# Build ImageMagick:
#
make_magick() {

  local MOD="ImageMagick"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/ImageMagick-${INT_MAGICK}

  LDFLAGS="" CFLAGS="" CXXFLAGS="" \
  ./configure \
    --prefix=/usr/lib${LIBDIRSUFFIX}/$PRGNAM \
    --enable-shared \
    --disable-static \
    --disable-openmp \
    --without-modules \
    --without-frozenpaths \
    --without-perl \
    --without-x \
    --with-gcc-arch=$ARCH \
    --enable-zero-configuration \
    --build=$TARGET \
    2>&1 | tee $OUTPUT/configure-${PRGNAM}_${MOD}.log

  # Build (no parallel build!) and install: follow the official SlackBuild
  # and first install to the target location, then rebuild and install into
  # the package location.
  make 2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log
  make install \
    2>&1 | tee $OUTPUT/install-${PRGNAM}_${MOD}.log
  make clean
  echo -e "\n**  Second run of 'make' for ImageMagick  **\n" \
    >> $OUTPUT/make-${PRGNAM}_${MOD}.log
  make 2>&1 | tee -a $OUTPUT/make-${PRGNAM}_${MOD}.log
  echo -e "\n**  Second run of 'make install' for ImageMagick  **\n" \
    >> $OUTPUT/make-${PRGNAM}_${MOD}.log
  make install DESTDIR=$PKG \
    2>&1 | tee -a $OUTPUT/install-${PRGNAM}_${MOD}.log

  # .la files in libdir should be removed.
  # Other .la files should be left alone, as ImageMagick uses them internally
  # to locate modules.
  rm -f $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/lib/*.la

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a AUTHORS LICENSE NEWS NOTICE README* \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_magick

#
# Build python 3.x:
#
make_python() {

  local MOD="python"
  echo -e "\n**  $MOD  **\n"

  local BRANCH_VERSION=$(echo $INT_PYTHON | cut -f 1,2 -d . )
  local SITEPK=$PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/lib/python${BRANCH_VERSION}/site-packages

  cd $TMP/tmp-$PRGNAM/Python-${INT_PYTHON}

  if [ "$P1" != "--oldbuild" ]; then
    touch $OUTPUT/patch-${PRGNAM}_${MOD}.log
    cat $PATCHDIR/python3.readline.set_pre_input_hook.diff \
      | patch -p1 --verbose \
      2>&1 | tee -a $OUTPUT/patch-${PRGNAM}_${MOD}.log
    # If system we're building on already has Python3 with pip in site-packages,
    # ignore it and install pip anyway.
    sed -i 's|\("install",\)|\1 "--ignore-installed",|' Lib/ensurepip/__init__.py
  fi

  # We are going to install python inside the calibre package.
  # This requires some changes to the standard build:
  # Creating the 'lib' directory below is needed! We are going to use rpath
  # so that we can run python from this non-standard path:
  mkdir -p /usr/lib${LIBDIRSUFFIX}/$PRGNAM/lib

  export CFLAGS="${SLKCFLAGS/-O2}"
  LDFLAGS="-Wl,-rpath /usr/lib${LIBDIRSUFFIX}/$PRGNAM/lib" \
  ./configure \
    --prefix=/usr/lib${LIBDIRSUFFIX}/$PRGNAM \
    --bindir=/usr/lib${LIBDIRSUFFIX}/$PRGNAM \
    --libdir=/usr/lib${LIBDIRSUFFIX}/$PRGNAM/lib \
    --with-platlibdir=lib \
    --enable-ipv6 \
    --enable-loadable-sqlite-extensions \
    --enable-optimizations \
    --enable-shared \
    --with-computed-gotos \
    --with-ssl-default-suites=python \
    --with-system-expat \
    --with-system-ffi \
    --without-ensurepip \
    --build=$TARGET \
    2>&1 | tee $OUTPUT/configure-${PRGNAM}_${MOD}.log

  make $NUMJOBS EXTRA_CFLAGS="$CFLAGS" || make \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log
  make install DESTDIR=$PKG EXTRA_CFLAGS="$CFLAGS" \
    2>&1 | tee -a $OUTPUT/make-${PRGNAM}_${MOD}.log

  # We'll install the python-tools under site-packages:
  mkdir -p $SITEPK
  cp -a Tools/* $SITEPK/

  # Remove DOS batch/exe files.
  find $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM \( -name '*.exe' -o -name '*.bat' \) -exec rm -f '{}' \+

  # Fix permissions on dynamic libraries.
  find $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM -type f -perm 555 -exec chmod 755 '{}' \+

  # No need for man pages now:
  rm -rf $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/share/man

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a LICENSE README* \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_python

#
# Build pyseuptools:
#
make_setuptools() {

  local MOD="setuptools"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/setuptools-${INT_SETUPTOOLS}
  rm -f setuptools/*.exe

  # Compile and install
  python3 setup.py install --root=$PKG \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a *.rst \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_setuptools


#
# Build pyqtbuilder:
#
make_pyqtbuilder() {

  local MOD="pyqtbuilder"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/PyQt-builder-${INT_PYQTBUILDER}

  # Compile and install
  python3 setup.py install --root=$PKG \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a LICENSE* README* \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_pyqtbuilder


#
# Build pip:
#
make_pip() {

  local MOD="pip"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/pip-${INT_PIP}

  # Compile and install
  python3 setup.py install --root=$PKG \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a AUTHORS.txt LICENSE.txt NEWS.rst PKG-INFO README.rst \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_pip


make_dnspython() {

  local MOD="dnspython"
  echo -e "\n**  ${MOD}  **\n"

  cd $TMP/tmp-$PRGNAM/dnspython-${INT_DNSPYTHON}

  # Compile and install
  python3 setup.py install --root=$PKG \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a LICENSE README* \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_dnspython

#
# Build css-parser:
#
make_cssparser() {

  local MOD="cssparser"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/css-parser-${INT_CSSPARSER}

  # The source is infested with DOS files:
  sed -i -e 's/\r//' $( find . -type f -exec file "{}" ";" | \
    grep CRLF | cut -f1 -d: ) \
    || true

  # Compile and install
  python3 setup.py install --root=$PKG \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a README* \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_cssparser

#
# Build dateutil:
#
make_dateutil() {

  local MOD="dateutil"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/python-dateutil-${INT_DATEUTIL}

  # Compile and install
  python3 setup.py install --root=$PKG \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a LICENSE NEWS \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_dateutil

#
# Build imaging (this package is called "python-pillow" in Slackware):
#
make_pillow() {

  local MOD="pillow"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/Pillow-${INT_PILLOW}

  # Installation path for headers:
  PYTHONINC=$( python3 -c 'from distutils.sysconfig import *;print (get_python_inc())' )

  # Compile and install
  export CFLAGS="$SLKCFLAGS"
  python3 setup.py install --root $PKG \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a CHANGES* LICENSE README* RELEASING* \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_pillow

#
# Build lxml:
#
make_lxml() {

  local MOD="lxml"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/lxml-${INT_LXML}

  # Compile and install
  python3 setup.py install --root=$PKG \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a *.txt doc/licenses \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_lxml

#
# Build mechanize:
#
make_mechanize() {

  local MOD="mechanize"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/mechanize-${INT_MECHANIZE}

  # Compile and install
  export CFLAGS="$SLKCFLAGS"
  python3 setup.py install --root=$PKG \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a *.txt \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_mechanize

#
# Build toml:
#
make_toml() {

  local MOD="toml"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/toml-${INT_TOML}

  # Compile and install
  export CFLAGS="$SLKCFLAGS"
  python3 setup.py install --root=$PKG \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a LICENSE *.rst \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_toml


#
# Build jeepney:
#
make_jeepney() {

  local MOD="jeepney"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/jeepney-${INT_JEEPNEY}

  python3 setup.py install --root=$PKG \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a LICENSE* *.rst \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_jeepney

#
# Build python-pygments:
#
make_pygments() {

  local MOD="pygments"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/Pygments-${INT_PYGMENTS}

  # Compile and install
  export CFLAGS="$SLKCFLAGS"
  python3 setup.py install --root=$PKG \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a AUTHORS CHANGES LICENSE README* \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_pygments


#
# Build python-pyparsing:
#
make_pyparsing() {

  local MOD="pyparsing"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/pyparsing-${INT_PYPARSING}

  # Compile and install
  export CFLAGS="$SLKCFLAGS"
  python3 setup.py install --root=$PKG \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a  CHANGES LICENSE* README* \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_pyparsing


#
# Build python-ply:
#
make_ply() {

  local MOD="ply"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/ply-${INT_PLY}

  # Compile and install
  export CFLAGS="$SLKCFLAGS"
  python3 setup.py install --root=$PKG \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a ANNOUNCE CHANGES PKG-INFO README.md TODO \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_ply


#
# Build python-packaging:
#
make_packaging() {

  local MOD="packaging"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/packaging-${INT_PACKAGING}

  # Compile and install
  export CFLAGS="$SLKCFLAGS"
  python3 setup.py install --root=$PKG \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a *.rst LICENSE* PKG-INFO \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_packaging


#
# Build sip:
#
make_sip() {

  local MOD="sip"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/sip-${INT_SIP}

  # Compile and install sip first:
  export CFLAGS="$SLKCFLAGS"
  python3 setup.py install --root=$PKG \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a LICENSE* NEWS README \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_sip


#
# Build pyqt-sip:
#
make_pyqt6sip() {

  local MOD="pyqt6-sip"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/PyQt6_sip-${INT_PYQT6SIP}

  # Compile and install:
  export CFLAGS="$SLKCFLAGS"
  python3 setup.py install --root=$PKG \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a LICENSE* README \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_pyqt6sip


#
# Build PyQt6:
#
make_pyqt6() {

  local MOD="pyqt6"
  echo -e "\n**  $MOD  **\n"

  PYTHON3LIB=$( python3 -c 'from distutils.sysconfig import get_python_lib; print(get_python_lib())' 2>/dev/null )

  if [ "${BUILD_QT}" = "NO" ]; then
    export QTDIR=/usr/lib${LIBDIRSUFFIX}/qt6
  else
    unset QT56IR
    export QTDIR=/usr/lib${LIBDIRSUFFIX}/${PRGNAM}
  fi

  export CFLAGS="$SLKCFLAGS"
  export CXXFLAGS="$SLKCFLAGS"

  cd $TMP/tmp-$PRGNAM/PyQt6-${INT_PYQT6}

  sip-build \
    --confirm-license \
    --jobs $(nproc) \
    --verbose \
    --qmake=$QTDIR/bin/qmake \
    --no-make \
    2>&1 | tee $OUTPUT/configure-${PRGNAM}_${MOD}.log
  cd build
    make $NUMJOBS || make \
      2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log
    make -j1 install DESTDIR=$PKG INSTALL_ROOT=$PKG  \
      2>&1 | tee -a $OUTPUT/make-${PRGNAM}_${MOD}.log
  cd - 1>/dev/null

  # Useless:
  rm -rf $PKG/$PYTHON3LIB/PyQt5/uic/port_v2/

  if [ "${BUILD_QT}" = "NO" ]; then
    # Remove ugly bits that threaten to overwrite a system file:
    rm -rf $PKG/usr/lib${LIBDIRSUFFIX}/qt6
  fi

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a LICENSE* NEWS \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_pyqt


#
# Build PyQtWebEngine:
#
make_pyqtwebengine() {

  local MOD="pyqtwebengine"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/PyQt6_WebEngine-${INT_PYQTWEBENG}

  if [ "${BUILD_QT}" = "NO" ]; then
    export QTDIR=/usr/lib${LIBDIRSUFFIX}/qt6
  else
    unset QT6DIR
    export QTDIR=/usr/lib${LIBDIRSUFFIX}/${PRGNAM}
  fi

  export CFLAGS="$SLKCFLAGS"
  export CXXFLAGS="$SLKCFLAGS"
  sip-build \
    --jobs $(nproc) \
    --verbose \
    --qmake $QTDIR/bin/qmake \
    --no-make \
    2>&1 | tee $OUTPUT/configure-${PRGNAM}_${MOD}.log
  cd build
    make \
      2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log
    make -j1 install DESTDIR=$PKG INSTALL_ROOT=$PKG  \
      2>&1 | tee -a $OUTPUT/make-${PRGNAM}_${MOD}.log
  cd - 1>/dev/null

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a LICENSE* NEWS \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_pyqtwebengine


#
# Build pycryptodome:
#
make_pycryptodome() {

  local MOD="pycryptodome"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/pycryptodome-${INT_PYCRYPTODOME}

  # Compile and install
  export CFLAGS="$SLKCFLAGS"
  python3 setup.py install --root=$PKG \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a *.rst \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_pycryptodome


#
# Build netifaces:
#
make_netifaces() {

  local MOD="netifaces"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/netifaces-${INT_NETIFACES}

  # Compile and install
  export CFLAGS="-I/usr/lib${LIBDIRSUFFIX}/$PRGNAM/include"
  python3 setup.py install --root=$PKG \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log
  unset CFLAGS

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a LICENSE README* \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_netifaces


#
# Build ifaddr:
#
make_ifaddr() {

  local MOD="ifaddr"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/ifaddr-${INT_IFADDR}

  # Compile and install
  export CFLAGS="-I/usr/lib${LIBDIRSUFFIX}/$PRGNAM/include"
  python3 setup.py install --root=$PKG \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log
  unset CFLAGS

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a LICENSE* *.rst \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_ifaddr


#
# Build zeroconf:
#
make_zeroconf() {

  local MOD="zeroconf"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/zeroconf-${INT_ZEROCONF}

  # Compile and install
  export CFLAGS="-I/usr/lib${LIBDIRSUFFIX}/$PRGNAM/include"
  python3 setup.py install --root=$PKG \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log
  unset CFLAGS

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a COPYING* *.rst \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_zeroconf


#
# Build apsw:
#
make_apsw() {

  local MOD="apsw"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/apsw-${INT_APSW}

  # Link in the SQLite amalgamation files to compile sqlite
  # statically into the module:
  rm -rf sqlite3
  ln -s ../sqlite-amalgamation-${INT_SQLITE} sqlite3

  # Compile and install
  export CFLAGS="$SLKCFLAGS"
  python3 setup.py build --enable-all-extensions \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log
  python3 setup.py install --root=$PKG --skip-build \
    2>&1 | tee $OUTPUT/install-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a PKG-INFO \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_apsw


#
# Build psutil:
#
make_psutil() {

  local MOD="psutil"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/psutil*-${INT_PSUTIL}

  # Compile and install
  export CFLAGS="$SLKCFLAGS"
  python3 setup.py install --root=$PKG \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a CREDITS HISTORY* INSTALL* LICENSE README* \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_psutil


#
# Build texttable:
#
make_texttable() {

  local MOD="texttable"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/texttable-${INT_TEXTTABLE}

  # Compile and install
  export CFLAGS="$SLKCFLAGS"
  python3 setup.py install --root=$PKG \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a LICENSE *.md \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_texttable


#
# Build multivolumefile:
#
make_multivolumefile() {

  local MOD="multivolumefile"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/multivolumefile-${INT_MULTIVOLUMEFILE}

  # Compile and install
  export CFLAGS="$SLKCFLAGS"
  python3 setup.py install --root=$PKG \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a LICENSE *.rst \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_multivolumefile


#
# Build pybrotli:
#
make_pybrotli() {

  local MOD="pybrotli"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/Brotli-${INT_PYBROTLI}

  # Compile and install
  export CFLAGS="$SLKCFLAGS"
  python3 setup.py install --root=$PKG \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a CONTRIBUTING.md LICENSE README* \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_pybrotli


#
# Build pyzstd:
#
make_pyzstd() {

  local MOD="pyzstd"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/pyzstd-${INT_PYZSTD}

  # Compile and install
  export CFLAGS="$SLKCFLAGS"
  python3 setup.py install --root=$PKG \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a LICENSE *.rst \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_pyzstd


#
# Build pyppmd:
#
make_pyppmd() {

  local MOD="pyppmd"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/pyppmd-${INT_PYPPMD}

  # Compile and install
  export CFLAGS="$SLKCFLAGS"
  python3 setup.py install --root=$PKG \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a *.rst \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_pyppmd


#
# Build fonttools:
#
make_fonttools() {

  local MOD="fonttools"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/fonttools-${INT_FONTTOOLS}

  # Compile and install
  export CFLAGS="$SLKCFLAGS"
  python3 setup.py install --root=$PKG \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a LICENSE* *.rst \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_fonttools


#
# Build py7zr:
#
make_py7zr() {

  local MOD="py7zr"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/py7zr-${INT_PY7ZR}

  # Compile and install
  export CFLAGS="$SLKCFLAGS"
  python3 setup.py install --root=$PKG \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a LICENSE *.rst \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_py7zr


#
# Build optipng:
#
make_optipng() {

  local MOD="optipng"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/optipng-${INT_OPTIPNG}

  ./configure -prefix=/usr \
    2>&1 | tee $OUTPUT/configure-${PRGNAM}_${MOD}.log

  make -C src 2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log
  mkdir -p $PKG/usr/bin
  install -v -m0755 src/optipng/optipng $PKG/usr/bin/optipng-$PRGNAM \
    2>&1 | tee -a $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a AUTHORS.txt LICENSE.txt README.tx* \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_optipng


#
# Build unrar source:
#
make_unrarsrc() {

  local MOD="unrarsrc"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/unrar
  if [ "$P1" != "--oldbuild" ]; then
    cp -a ../unrar ../libunrar
  else
    make clean
    make clean -C ../libunrar
  fi
  make -C ../libunrar lib libversion=${INT_UNRARSRC} CXXFLAGS="$SLKCFLAGS" \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log
  make -f makefile unrar lib CXXFLAGS="$SLKCFLAGS" \
    2>&1 | tee -a $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Manually install binaries:
  install -D -m 755 unrar $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/bin/unrar
  install -D -m 755 ../libunrar/libunrar.so $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/lib/libunrar.so
  install -D -m 644 dll.hpp $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/include/unrar/dll.hpp

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a acknow.txt license.txt readme.txt \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_unrarsrc


#
# Build hunspell:
#
make_hunspell() {

  local MOD="hunspell"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/hunspell-${INT_HUNSPELL}

  autoreconf -vif \
    2>&1 | tee $OUTPUT/configure-${PRGNAM}_${MOD}.log

  CFLAGS="$SLKCFLAGS" \
  CXXFLAGS="$SLKCFLAGS" \
  ./configure \
    --prefix=/usr/lib${LIBDIRSUFFIX}/$PRGNAM \
    --disable-static \
    --with-readline \
    --build=$TARGET \
    2>&1 | tee $OUTPUT/configure-${PRGNAM}_${MOD}.log

  # Build and install:
  make $NUMJOBS || make \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log
  make install DESTDIR=$PKG \
    2>&1 | tee $OUTPUT/install-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a ABOUT-NLS AUTHORS* COPYING* ChangeLog* NEWS README* THANKS \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_hunspell


#
# Build hyphen:
#
make_hyphen() {

  local MOD="hyphen"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/hyphen-${INT_HYPHEN}

  LDFLAGS="" \
  LD_LIBRARY_PATH="/usr/lib${LIBDIRSUFFIX}/$PRGNAM/lib" \
  ./configure \
    --prefix=/usr/lib${LIBDIRSUFFIX}/$PRGNAM \
    --enable-shared=yes \
    --enable-static=no \
    --build=$TARGET \
    --host=$TARGET \
    2>&1 | tee $OUTPUT/configure-${PRGNAM}_${MOD}.log

  make 2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log
  make install DESTDIR=$PKG 2>&1 | tee -a $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a AUTHORS COPYIN* ChangeLog INSTALL NEWS READM* THANKS TODO \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_hyphen


#
# Build python-regex:
#
make_regex() {

  local MOD="regex"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/regex-${INT_REGEX}

  # Compile and install
  export CFLAGS="$SLKCFLAGS"
  python3 setup.py install --root=$PKG --optimize=1 \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a docs/Features.html docs/Features.rst \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_regex


#
# Build msgpack-python:
#
make_msgpack() {

  local MOD="msgpack"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/msgpack-${INT_MSGPACK}

  # Compile and install
  export CFLAGS="$SLKCFLAGS"
  python3 setup.py install --root=$PKG --optimize=1 \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a COPYING* README* \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_msgpack


#
# Build six:
#
make_six() {

  local MOD="six"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/six-${INT_SIX}

  # Compile and install
  export CFLAGS="$SLKCFLAGS"
  python3 setup.py install --root=$PKG --optimize=1 \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a CHANGES LICENSE* README* \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_six


#
# Build webencodings:
#
make_webenc() {

  local MOD="webencodings"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/webencodings-${INT_WEBENC}

  # Compile and install
  export CFLAGS="$SLKCFLAGS"
  python3 setup.py install --root=$PKG --optimize=1 \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a README* \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_webenc


#
# Build html5lib:
#
make_html5lib() {

  local MOD="html5lib"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/html5lib-${INT_HTML5LIB}

  # Compile and install
  export CFLAGS="$SLKCFLAGS"
  python3 setup.py install --root=$PKG --optimize=1 \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a LICENSE* README* *.rst requirements.txt \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_html5lib


#
# Build html5-parser:
#
make_html5parser() {

  local MOD="html5-parser"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/html5-parser-${INT_HTML5PARSER}

  # Compile and install
  export CFLAGS="$SLKCFLAGS"
  python3 setup.py install --root=$PKG --optimize=1 \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a LICENSE* README* \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_html5parser


#
# Build unrardll:
#
make_unrardll() {

  local MOD="unrardll"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/unrardll-${INT_UNRARDLL}

  # Compile and install
  export CFLAGS="$SLKCFLAGS -I/usr/lib${LIBDIRSUFFIX}/$PRGNAM/include"
  python3 setup.py install --root=$PKG --optimize=1 \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a LICENSE* README* \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_unrardll


make_feedparser() {

  local MOD="feedparser"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/feedparser-${INT_FEEDPARSER}

  # Compile and install
  export CFLAGS="$SLKCFLAGS"
  python3 setup.py install --root=$PKG --optimize=1 \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a LICENSE* NEWS README* \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_feedparser


#
# Build sgmllib3k:
#
make_sgmllib3k() {

  local MOD="sgmllib3k"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/sgmllib3k-${INT_SGMLLIB3K}

  # Compile and install
  python3 setup.py install --root=$PKG \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a LICENSE* README \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_sgmllib3k


make_Markdown() {

  local MOD="Markdown"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/Markdown-${INT_MARKDOWN}

  # Compile and install
  export CFLAGS="$SLKCFLAGS"
  python3 setup.py install --root=$PKG --optimize=1 \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a *.md \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_Markdown


make_beautifulsoup() {

  local MOD="beautifulsoup"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/beautifulsoup4-${INT_BEAUTIFULSOUP}

  # Compile and install:
  python3 setup.py install --root=$PKG \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a *.txt LICENSE README.md \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_beautifulsoup


make_soupsieve() {

  local MOD="soupsieve"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/soupsieve-${INT_SOUPSIEVE}

  # Compile and install:
  python3 setup.py build \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log
  python3 setup.py install --root=$PKG --optimize=1 \
    2>&1 | tee -a $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a *.md \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_soupsieve


make_html2text() {

  local MOD="html2text"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/html2text-${INT_HTML2TEXT}

  # Compile and install:
  python3 setup.py install --root=$PKG \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a *.rst COPYING README.md \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_html2text


make_chardet() {

  local MOD="chardet"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/chardet-${INT_CHARDET}

  # Compile and install:
  python3 setup.py install --root=$PKG \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a *.rst LICENSE \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_chardet


make_uchardet() {

  local MOD="uchardet"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/uchardet-${INT_UCHARDET}

  # Compile and install:
  mkdir -p build
  cd build
    cmake .. \
      -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \
      -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \
      -DCMAKE_INSTALL_PREFIX=/usr/lib${LIBDIRSUFFIX}/$PRGNAM \
      -DCMAKE_INSTALL_LIBDIR=lib \
      2>&1 | tee $OUTPUT/configure-${PRGNAM}_${MOD}.log
    make $NUMJOBS 2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log
    make DESTDIR=$PKG install 2>&1 | tee $OUTPUT/install-${PRGNAM}_${MOD}.log
  cd - 1>/dev/null


  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a COPYING *.rst LICENSE \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_uchardet


make_pychm() {

  local MOD="pychm"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/pychm-${INT_PYCHM}

  # Compile and install:
  python3 setup.py install --root=$PKG \
    2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a COPYING LICENSE NEWS README \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_pychm


make_stemmer() {

  local MOD="stemmer"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/snowball-${INT_STEMMER}
  # Also generate dynamic lib for calibre:
  cat $PATCHDIR/libstemmer.dynamiclib.patch | patch -p1 --verbose \
    2>&1 | tee $OUTPUT/patch-${PRGNAM}_${MOD}.log

  # Compile and install:
  make 2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log

  install -D -m0755 -t $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ stemwords
  install -D -m0644 -t $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/include include/libstemmer.h
  install -D -t $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/lib libstemmer.a
  install -D -t $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/lib libstemmer.so.0.0.0
  ln -s libstemmer.so.0.0.0 $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/lib/libstemmer.so.0
  ln -s libstemmer.so.0 $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/lib/libstemmer.so

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a AUTHORS COPYING* NEWS *.rst \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_stemmer


make_podofo() {

  local MOD="podofo"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/podofo-${INT_PODOFO}

  # Fix the mandir location (we delete usr/man later on):
  sed -i -e 's#SET(MANDIR "share/man/")#SET(MANDIR "man/")#' CMakeLists.txt

  # Build fails otherwise:
  mkdir -p test/TokenizerTest/objects

  mkdir -p build
  cd build
    cmake \
      -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \
      -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \
      -DFREETYPE_INCLUDE_DIR=/usr/include/freetype2 \
      -DCMAKE_INSTALL_PREFIX=/usr/lib${LIBDIRSUFFIX}/$PRGNAM \
      -DPODOFO_BUILD_STATIC:BOOL=0 \
      -DPODOFO_BUILD_SHARED:BOOL=1 \
      -DPODOFO_USE_VISIBILITY:BOOL=1 \
      -DCMAKE_CXX_STANDARD:STRING=11 \
      -DWANT_BOOST:BOOL=0 \
      ..
    make $NUMJOBS 2>&1 | tee $OUTPUT/make-${PRGNAM}.log
    make DESTDIR=$PKG install 2>&1 | tee $OUTPUT/install-${PRGNAM}.log
  cd - 1>/dev/null

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a AUTHORS ChangeLog CODING* CONTRIBUTIONS* COPYING* \
    FAQ* INSTALL README* TODO \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_podofo


#
# Build speech-dispatcher:
#
make_speechdispatcher() {

  local MOD="speechdispatcher"
  echo -e "\n**  $MOD  **\n"

  cd $TMP/tmp-$PRGNAM/speech-dispatcher-${INT_SPEECHD}

  LDFLAGS="" \
  LD_LIBRARY_PATH="/usr/lib${LIBDIRSUFFIX}/$PRGNAM/lib" \
  ./configure \
    --prefix=/usr/lib${LIBDIRSUFFIX}/$PRGNAM \
    --libexecdir=/usr/lib${LIBDIRSUFFIX}/$PRGNAM/lib \
    --sysconfdir=/usr/lib${LIBDIRSUFFIX}/$PRGNAM/etc \
    --mandir=/usr/lib${LIBDIRSUFFIX}/$PRGNAM/man \
    --enable-shared=yes \
    --enable-static=no \
    --with-ibmtts=no --with-kali=no --with-baratinoo=no --with-voxin=no \
    --without-flite \
    --build=$TARGET \
    --host=$TARGET \
    2>&1 | tee $OUTPUT/configure-${PRGNAM}_${MOD}.log

  make 2>&1 | tee $OUTPUT/make-${PRGNAM}_${MOD}.log
  # A 'spd-conf.1' already exists but make falters when re-generating it:
  touch ./src/api/python/speechd_config/spd-conf.1
  make -j1 -i 2>&1 | tee  $OUTPUT/make-${PRGNAM}_${MOD}_spd-conf.log
  make install DESTDIR=$PKG 2>&1 | tee $OUTPUT/install-${PRGNAM}_${MOD}.log

  rm -f $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/etc/speech-dispatcher/modules/cicero.conf
  rm -f $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/etc/speech-dispatcher/modules/flite.conf
  rm -f $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/lib/speech-dispatcher/speech-dispatcher-modules/sd_cicero

  # Add documentation:
  mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD}
  cp -a AUTHORS COPYIN* INSTALL NEWS READM* TODO \
    $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/${MOD} || true

} # End make_speechdispatcher



# --------------
# Build calibre:
# --------------

make_calibre () {

  echo -e "\n**  calibre  **\n"

  touch $OUTPUT/patch-$PRGNAM.log
  cd $TMP/tmp-$PRGNAM/${SRCNAM}-${VERSION}

  if [ "$P1" != "--oldbuild" ]; then
    # This dropping of privilege is unneccessary and breaks the SlackBuild:
    sed -i -e "s:if os.geteuid() == 0:if False and os.geteuid() == 0:" \
      setup/install.py

    ## Calibre should not hard-code the hunspell library version:
    #OURLIB=$(pkg-config --libs hunspell |sed 's/-l//')
    #sed -i setup/extensions.json -e 's/"libraries": "hunspell-.*"/"libraries": "'$OURLIB'"/'
  fi

  # See if we picked up any compiler or linker flags for python:
  LDFLAGS=${LDFLAGS:-""}
  CFLAGS=${CFLAGS:-""}

  # Place where we have to install stuff:
  PYTHONLIB=$( python3 -c "from distutils.sysconfig import get_python_lib; print (get_python_lib())" )

  # Create the directory for calibre's environment module:
  mkdir -p $PKG$PYTHONLIB

  # Find the prefix python was installed to (may be different from calibre's):
  PYTHONROOT=$( python3 -c "from distutils.sysconfig import get_python_lib; print (get_python_lib(prefix='/'))" )
  PYTHONPREF="${PYTHONLIB%$PYTHONROOT}"

  ## Massage the install script to actually install to that python libdir:
  #sed -i setup/install.py \
  #    -e "s,'lib','lib${LIBDIRSUFFIX}',g" \
  #    -e "/s.get_python_lib(prefix=/s,(prefix=.*),(prefix='$PKG$PYTHONPREF'),"
  # Massage the install script:
  sed -i setup/install.py \
      -e "s,'lib','lib${LIBDIRSUFFIX}',g" \
      -e "/^ *self./s,'calibre','$PRGNAM',"

  # Cut out the DOS crap:
  sed -i -e 's/\r//' src/calibre/web/feeds/recipes/*

  export HUNSPELL_INC_DIR="/usr/lib${LIBDIRSUFFIX}/$PRGNAM/include/hunspell"
  export HUNSPELL_LIB_DIR="/usr/lib${LIBDIRSUFFIX}/$PRGNAM/lib"
  export PODOFO_INC_DIR="/usr/lib${LIBDIRSUFFIX}/$PRGNAM/include/podofo"
  export PODOFO_LIB_DIR="/usr/lib${LIBDIRSUFFIX}/$PRGNAM/lib"
  export FT_LIB_DIR="/usr/lib${LIBDIRSUFFIX}"

  export LDFLAGS="$LDFLAGS $SLKLDFLAGS -lfontconfig"
  export CFLAGS="$CFLAGS $SLKCFLAGS"
  # To run RapydScript using QtWebengine:
  export QTWEBENGINE_DISABLE_SANDBOX=1

  touch $OUTPUT/make-${PRGNAM}.log
  LANG='en_US.UTF-8' \
  python3 setup.py build \
    2>&1 | tee -a $OUTPUT/make-${PRGNAM}.log
  LANG='en_US.UTF-8' \
  python3 setup.py iso639 \
    2>&1 | tee -a $OUTPUT/make-${PRGNAM}.log
  LANG='en_US.UTF-8' \
  python3 setup.py iso3166 \
    2>&1 | tee -a $OUTPUT/make-${PRGNAM}.log
  LANG='en_US.UTF-8' \
  python3 setup.py translations \
    2>&1 | tee -a $OUTPUT/make-${PRGNAM}.log
  LANG='en_US.UTF-8' \
  python3 setup.py resources \
    --path-to-hyphenation=$(pwd)/../dictionaries-${INT_HYPHENATION} \
    --system-liberation_fonts \
    --path-to-liberation_fonts=/usr/share/fonts/TTF \
    --path-to-mathjax=$(pwd)/../MathJax-${INT_MATHJAX} \
    2>&1 | tee -a $OUTPUT/make-${PRGNAM}.log
  LANG='en_US.UTF-8' \
  python3 setup.py rapydscript \
    2>&1 | tee -a $OUTPUT/make-${PRGNAM}.log
  LANG='en_US.UTF-8' \
  python3 setup.py gui \
    2>&1 | tee -a $OUTPUT/make-${PRGNAM}.log
  if [ ! -f $SRCDIR/sources/user-agent-data.json ] || [ "${BUILD_NEWUAS}" != "NO" ]; then
    # Generate the UserAgent-strings file by collecting online data:
    LANG='en_US.UTF-8' \
    python3 setup.py recent_uas \
      2>&1 | tee -a $OUTPUT/make-${PRGNAM}.log
    # For later re-use:
    cp -a resources/user-agent-data.json $SRCDIR/sources/
  else
    install -m0644 $SRCDIR/sources/user-agent-data.json \
      resources/user-agent-data.json
  fi

  # Create the directories the xdg-utils expects to be present:
  mkdir -p $PKG/usr/share/{applications,icons/hicolor,mime/packages}
  mkdir -p $PKG/usr/share/{desktop-directories,packages}

  # Install the lot:
  XDG_DATA_DIRS="$PKG/usr/share" \
  XDG_UTILS_INSTALL_MODE="system" \
  LIBPATH=/usr/lib${LIBDIRSUFFIX} \
  LANG='en_US.UTF-8' \
  python3 setup.py install \
    --prefix=/usr \
    --libdir=/usr/lib${LIBDIRSUFFIX} \
    --staging-root=$PKG/usr \
    --staging-libdir=$PKG/usr/lib${LIBDIRSUFFIX} \
    2>&1 | tee $OUTPUT/install-$PRGNAM.log

  # The bash completion files need to be in /etc :
  [ -d $PKG/usr/etc ] && mv $PKG/usr/etc $PKG/

  # Add man pages:
  mkdir -p ${PKG}/usr/man
  cp -a man-pages/* ${PKG}/usr/man/

  # This does not belong in a package - use 'removepkg' instead:
  rm -f $PKG/usr/bin/calibre-uninstall

  # We don't need this either at runtime:
  rm -rf $PKG/usr/share/$PRGNAM/rapydscript/

  ## Create symlinks to system Libration fonts:
  #if [ -d $PKG/usr/share/$PRGNAM/fonts/liberation ]; then
  #  echo  "** Replacing Liberation fonts with symlinks..."
  #  ( cd $PKG/usr/share/$PRGNAM/fonts/liberation/
  #    for FONT in *.ttf *.otf ; do
  #      if [ -f /usr/share/fonts/TTF/$FONT ]; then
  #        rm -f $FONT
  #        ln -sf /usr/share/fonts/TTF/$FONT
  #      fi
  #    done
  #  )
  #else
  #  echo  "** Adding Liberation fonts as symlinks..."
  #  mkdir -p $PKG/usr/share/$PRGNAM/fonts/liberation
  #  ( cd $PKG/usr/share/$PRGNAM/fonts/liberation
  #    for FONT in /usr/share/fonts/TTF/Liberation*.ttf ; do
  #      ln -sf $FONT
  #    done
  #  )
  #fi

  # All these files will be generated by update-mime-database:
  find $PKG/usr/share/mime -maxdepth 1 -type f | xargs rm -f

  # But this one needs to be added here:
  install -Dm644 resources/calibre-mimetypes.xml \
    ${PKG}/usr/share/mime/packages/calibre-mimetypes.xml

  # These files are generated by update-desktop-database while installing:
  rm -f $PKG/usr/share/applications/defaults.list
  rm -f $PKG/usr/share/applications/mimeinfo.cache

  # These two served their purpose:
  rmdir $PKG/usr/share/{desktop-directories,packages}

  # And then some additions or it won't all look nice in your menu:

  # Add a MimeType icon for lrf, and add an application icon:
  for i in 16 24 32 48 64 96 128; do
    mkdir -p $PKG/usr/share/icons/hicolor/${i}x${i}/{apps,mimetypes}
    convert imgsrc/mimetypes/lrf.svg -scale $i \
      $PKG/usr/share/icons/hicolor/${i}x${i}/mimetypes/application-x-sony-bbeb.png
    convert resources/images/library.png -resize ${i}x${i} \
      $PKG/usr/share/icons/hicolor/${i}x${i}/apps/calibre-gui.png
    convert imgsrc/viewer.svg -scale $i \
      $PKG/usr/share/icons/hicolor/${i}x${i}/apps/calibre-viewer.png
  done

} # End of make_calibre

#
# End of the subroutines.
#

# Not part of Slackware or too old, and need it:
if  [ ! -f $SRCDIR/${PRGNAM}_pythondeps-${SLACKVER}-${ARCH}.tar.bz2 ]; then
  # No tarball containing pre-compiled libraries was found.
  # We need to build these supporting tools ourself.
  
  # After each part is built we will sync to here because in the end, calibre
  # will wipe the origin and we will have to sync it all back:
  mkdir -p /usr/lib${LIBDIRSUFFIX}/$PRGNAM

  make_hunspell
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_optipng
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_podofo
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_hyphen
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_unrarsrc
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/
fi
# End - not part of Slackware

# Compilation of the optional software:
if [ "$BUILD_PYTHON" = "YES" -o "$BUILD_MTP" = "YES" -o "$BUILD_QT" = "YES" -o "$BUILD_MAGICK" = "YES" ]; then
  if  [ -f $SRCDIR/${PRGNAM}_pythondeps-${SLACKVER}-${ARCH}.tar.bz2 ]; then
    # We unwrap the tarball of compiled python internal libraries instead of
    # having to build them - this saves a _lot_ of compile time:
    mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM
    ( cd $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM
      echo "**  Extracting dependencies tarball... **"
      tar -jxf $SRCDIR/${PRGNAM}_pythondeps-${SLACKVER}-${ARCH}.tar.bz2
      # We also need a copy in the filesystem root!
      rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM /usr/lib${LIBDIRSUFFIX}/
    )
  fi

  # Ensure that our non-standard python3 is found and used:
  echo "** Configuring build environment for preferring internal libraries **"
  export PATH="/usr/lib${LIBDIRSUFFIX}/$PRGNAM:/usr/lib${LIBDIRSUFFIX}/$PRGNAM/bin:$PATH"
  export PKG_CONFIG_PATH="/usr/lib${LIBDIRSUFFIX}/$PRGNAM/lib/pkgconfig:$PKG_CONFIG_PATH"
  export LDFLAGS="-Wl,-rpath /usr/lib${LIBDIRSUFFIX}/$PRGNAM/lib -L/usr/lib${LIBDIRSUFFIX}/$PRGNAM/lib"

  # In order to prevent a gcc error if we have to compile libmtp:
  mkdir -p /usr/lib${LIBDIRSUFFIX}/$PRGNAM/lib

fi

if [ "$BUILD_MTP" = "YES" ]; then
  # No sufficiently new libmtp was found so we need to supply it ourself.

  if  [ ! -f $SRCDIR/${PRGNAM}_pythondeps-${SLACKVER}-${ARCH}.tar.bz2 ]; then
    # No tarball containing pre-compiled libraries was found.
    # We need to build libmptp ourself.
    
    # After each part is built we will sync to here because in the end, calibre
    # will wipe the origin and we will have to sync it all back:
    mkdir -p /usr/lib${LIBDIRSUFFIX}/$PRGNAM

    make_mtp
    rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/
  fi
fi

if [ "$BUILD_MAGICK" = "YES" ]; then
  # We want to have an internal version of ImageMagick to be less dependent
  # of Slackware library version changes.

  if  [ ! -f $SRCDIR/${PRGNAM}_pythondeps-${SLACKVER}-${ARCH}.tar.bz2 ]; then
    # No tarball containing pre-compiled libraries was found.
    # We need to build Magick ourself.
    
    # After each part is built we will sync to here because in the end, calibre
    # will wipe the origin and we will have to sync it all back:
    mkdir -p /usr/lib${LIBDIRSUFFIX}/$PRGNAM

    make_magick
    rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/
  fi
fi

# We build the python interpreter ourself.

if  [ ! -f $SRCDIR/${PRGNAM}_pythondeps-${SLACKVER}-${ARCH}.tar.bz2 ]; then
  # No tarball containing pre-compiled python libraries was found.
  # We need to build python now.
    
  # After each part is built we will sync to here because in the end, calibre
  # will wipe the origin and we will have to sync it all back:
  mkdir -p /usr/lib${LIBDIRSUFFIX}/$PRGNAM

  make_python
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/
fi

SLK_PYTHON_INCLUDES="-I/usr/lib${LIBDIRSUFFIX}/$PRGNAM/include/python${REQUIRED_PYTHON}"
SLK_PYTHON_LIBS="-L/usr/lib${LIBDIRSUFFIX}/$PRGNAM/lib -lpython${REQUIRED_PYTHON}"
export PYTHON="/usr/lib${LIBDIRSUFFIX}/$PRGNAM/python3"

# The python modules need to be compiled into the package:

if  [ ! -f $SRCDIR/${PRGNAM}_pythondeps-${SLACKVER}-${ARCH}.tar.bz2 ]; then
  # No tarball containing pre-compiled python libraries was found.
  # We need to build python modules ourself.
    
  # After each part is built we will sync to here because in the end, calibre
  # will wipe the origin and we will have to sync it all back:
  mkdir -p /usr/lib${LIBDIRSUFFIX}/$PRGNAM
  mkdir -p /usr/lib${LIBDIRSUFFIX}/$PRGNAM/{bin,lib}

  ## Ensure that all our binaries and libraries are found and used:
  #export PATH="/usr/lib${LIBDIRSUFFIX}/$PRGNAM:/usr/lib${LIBDIRSUFFIX}/$PRGNAM/bin:$PATH"
  #export PKG_CONFIG_PATH="/usr/lib${LIBDIRSUFFIX}/$PRGNAM/lib/pkgconfig:$PKG_CONFIG_PATH"
  #export LDFLAGS="-Wl,-rpath /usr/lib${LIBDIRSUFFIX}/$PRGNAM/lib -L/usr/lib${LIBDIRSUFFIX}/$PRGNAM/lib"

  make_setuptools
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_pyqtbuilder
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_pip
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_stemmer
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_unrardll
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_pillow
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_apsw || exit 1
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_beautifulsoup
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_soupsieve
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_dnspython
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_cssparser
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_dateutil
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_lxml
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_mechanize
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_pycryptodome
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_netifaces
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_ifaddr
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_jeepney
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_psutil
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_zeroconf
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_texttable
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_multivolumefile
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_pybrotli
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_pyzstd
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_pyppmd
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_py7zr
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_pygments
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_pyparsing
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_ply
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_packaging
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_fonttools
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_toml
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_webenc
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_html5lib
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_html5parser
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_feedparser
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_sgmllib3k
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_Markdown
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_html2text
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_regex
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_six
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_msgpack
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_chardet
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_uchardet
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  if [ "$BUILD_QT" = "YES" ]; then
    # No sufficiently new Qt was found so we need to supply it ourself.
    make_qt6
    rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/
  fi

  make_sip
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_pyqt6sip
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_pyqt6
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_pyqtwebengine
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_pychm
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

  make_speechdispatcher
  rsync -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ /usr/lib${LIBDIRSUFFIX}/$PRGNAM/

fi

if [ "$BUILD_PYTHON" = "YES" -o "$BUILD_MTP" = "YES" -o "$BUILD_QT" = "YES" ]; then
  # At this point we can wrap the compiled python etc. internal libraries
  # into a tarball which we can re-use in a future build (so that we do not
  # have to recompile them every time).
  # If you want to make use of this, then just copy the resulting tarball
  # into the same directory as this SlackBuild script:
  if  [ ! -f $SRCDIR/${PRGNAM}_pythondeps-${SLACKVER}-${ARCH}.tar.bz2 ]; then
    ( cd $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM
      echo "**"
      echo "** Creating dependencies tarball $OUTPUT/${PRGNAM}_pythondeps-${SLACKVER}-${ARCH}.tar.bz2"
      echo "** Move this file to $SRCDIR for future compilation speedups."
      echo "**"
      tar -jcf $OUTPUT/${PRGNAM}_pythondeps-${SLACKVER}-${ARCH}.tar.bz2 .
    )
  fi
fi

# We need to point calibre's compilation at our custom headers:
export CFLAGS="-I/usr/lib${LIBDIRSUFFIX}/$PRGNAM/include"

# The main course - compile calibre:
make_calibre

# Compiling calibre will have wiped all previously compiled python stuff,
# so we need to put it back into the package, and then it can go:
rsync -a /usr/lib${LIBDIRSUFFIX}/$PRGNAM/ $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/
# Wait with with the removal until after byte-compiling:
#rm -rf /usr/lib${LIBDIRSUFFIX}/$PRGNAM

# We need to tell calibre to use the internal python:
for FILE in $PKG/usr/bin/* ; do
 if ! file $FILE | grep -q ELF ; then
  sed -i \
   -e "s,^#!/usr/bin/env .*$,#!/usr/lib${LIBDIRSUFFIX}/$PRGNAM/python3," \
   $FILE
 fi
done

# Install the downloaded Mozilla CA certficate bundle:
cp -a $SRCDIR/sources/mozilla-ca-certs.pem $PKG/usr/share/calibre/mozilla-ca-certs.pem

# The calibre init script is misplaced:
mv $PKG/usr/lib/python3.10/site-packages/init_calibre.py \
  $PKG/usr/lib${LIBDIRSUFFIX}/calibre/lib/python3.10/site-packages/
# Cleanup empty directories:
(cd $PKG/usr; rmdir lib/python3.10/site-packages && rmdir lib/python3.10 && rmdir lib || true)

# This is not needed in the package:
rm -rf $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/{lib/pkgconfig,lib/python*/test,man,usr/man}

# Compiling bytecode makes Calibre startup much faster:
set +e
/usr/lib${LIBDIRSUFFIX}/$PRGNAM/python3 -m compileall -d '/' ${PKG}/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ || true
/usr/lib${LIBDIRSUFFIX}/$PRGNAM/python3 -OO -m compileall -d '/' ${PKG}/usr/lib${LIBDIRSUFFIX}/$PRGNAM/ || true
set -e

# Now we can remove these from the filesystem:
rm -rf /usr/lib${LIBDIRSUFFIX}/$PRGNAM

# Create a doinst.sh:
mkdir -p $PKG/install
cat <<EOT >> $PKG/install/doinst.sh
# Update the desktop and mime database:
if [ -x usr/bin/update-desktop-database ]; then
  chroot . /usr/bin/update-desktop-database usr/share/applications > /dev/null 2>&1
fi
if [ -x usr/bin/update-mime-database ]; then
  chroot . /usr/bin/update-mime-database usr/share/mime > /dev/null 2>&1
fi
if [ -x usr/bin/gtk-update-icon-cache ] ; then
  chroot . /usr/bin/gtk-update-icon-cache --quiet usr/share/icons/hicolor 
fi

EOT

# Add documentation:
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
# First, the calibre documentation files:
cp -a $DOCS $PKG/usr/doc/$PRGNAM-$VERSION || true
# Add documentation (mainly licenses) of the internal python deps:
mv $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc/internaldeps/* $PKG/usr/doc/$PRGNAM-$VERSION/ || true
rm -rf $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/doc
# Add all the patches we used to build this package:
cp -a $PATCHDIR $PKG/usr/doc/$PRGNAM-$VERSION
# And finally, add this SlackBuild script:
cat $SRCDIR/$(basename $0) > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
chown -R root:root $PKG/usr/doc/$PRGNAM-$VERSION
find $PKG/usr/doc -type f -exec chmod 644 {} \;

# Compress the man page(s):
if [ -d $PKG/usr/man ]; then
  find $PKG/usr/man -type f -name "*.?" -exec gzip -9f {} \;
  for i in $(find $PKG/usr/man -type l -name "*.?") ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done
fi

# Don't ship .la files:
rm -f $PKG/{,usr/}lib${LIBDIRSUFFIX}/*.la

# Strip binaries (if any):
find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \
  | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true

# Add a package description:
mkdir -p $PKG/install
cat $SRCDIR/slack-desc.${PRGNAM} > $PKG/install/slack-desc
## Add the external dependencies :
#cat $SRCDIR/slack-required.${PRGNAM} > $PKG/install/slack-required

# Build the package:
cd $PKG
makepkg --linkadd y --chown n $OUTPUT/${PRGNAM}-${VERSION}-${ARCH}-${BUILD}${TAG}.${PKGTYPE:-txz} 2>&1 | tee $OUTPUT/makepkg-${PRGNAM}.log
cd $OUTPUT
md5sum ${PRGNAM}-${VERSION}-${ARCH}-${BUILD}${TAG}.${PKGTYPE:-txz} > ${PRGNAM}-${VERSION}-${ARCH}-${BUILD}${TAG}.${PKGTYPE:-txz}.md5
cd -
cat $PKG/install/slack-desc | grep "^${PRGNAM}" > $OUTPUT/${PRGNAM}-${VERSION}-${ARCH}-${BUILD}${TAG}.txt
#cat $PKG/install/slack-required > $OUTPUT/${PRGNAM}-${VERSION}-${ARCH}-${BUILD}${TAG}.dep

# Restore the original umask:
umask ${_UMASK_}

