#!/bin/bash
# dpkg configuration script for linuxcnc
# Copyright (C) 2006 Jeff Epler
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# When used to produce a debian package, this file is a script "used to
# control compilation and installation of the executable"

set -e

usage () {
    P=${0##*/}
    cat <<EOF
$P: Set up debian/ files to build for a particular kernel

Usage:
  $P [no-docs]

  Extra options:
    no-docs
        Skip building documentation
EOF
}

cd "${0%/*}"

if [ "$1" == "-h" ] || [ "$1" == "-help" ] || [ "$1" == "--help" ]; then
    usage
    exit 0
fi

EXTRA_BUILD=
PYTHON_VERSION_NEXT=$(python3 -c 'import sys; print (sys.version[:2] + str(1+int(sys.version[2])))')
LIBREADLINE_DEV="libeditreadline-dev | libreadline-gplv2-dev | libreadline-dev"

ENABLE_BUILD_DOCUMENTATION=--enable-build-documentation=pdf

# Specialize these based on DISTRIB_NAME as needed
# These do not run-time depend on a specific package because
# the whole point is to allow a range of kernels to work, and we don't know
# of any common thing that all such kernels would provide.

while test $# -ne 0; do
    case "$1" in
    sim|uspace|noauto) echo "$1 is accepted for compatibility, but ignored";;
    no-docs) unset ENABLE_BUILD_DOCUMENTATION ;;
    *) echo 1>&2 "Unknown option: $1"; exit 99 ;;
    esac
    shift
done

DISTRIB_NAME=
if [ "$(command -v lsb_release)" != "" ] || [ "$(which lsb_release)" != "" ]; then
    ID="$(lsb_release --short --id)"
    RELEASE="$(lsb_release --short --release)"
    # Workaround for broken lsb_release, <URL: https://bugs.debian.org/1008735 >
    case "$RELEASE" in
      n/a)
        RELEASE=unstable
        ;;
    esac
    DISTRIB_NAME="$ID-$RELEASE"
elif [ -f /etc/lsb-release ]; then
    source /etc/lsb-release
    DISTRIB_NAME=$DISTRIB_ID-$DISTRIB_RELEASE
fi

if [ -n "$ENABLE_BUILD_DOCUMENTATION" ]; then
    DOC_DEPENDS="dblatex (>= 0.2.12),\n    dvipng,\n    fonts-dejavu,\n    graphviz,\n    groff,\n    inkscape,\n    python3-lxml,\n    source-highlight,\n    texlive-extra-utils,\n    texlive-font-utils,\n    texlive-fonts-recommended,\n    texlive-lang-cyrillic,\n    texlive-lang-european,\n    texlive-lang-french,\n    texlive-lang-german,\n    texlive-lang-polish,\n    texlive-lang-spanish,\n    texlive-latex-recommended,\n    w3c-linkchecker,\n    xsltproc"
    

    case $DISTRIB_NAME in
	Debian-9)
	    ;; # No xetex in Debian 9 Stretch
	*)
	    # Not quite sure which packages is needed for xetex, but
	    # texlive-xetex seem like a safe choice.  Need xetex to be
	    # able to build Chinese PDF.
	    DOC_DEPENDS="$DOC_DEPENDS,\n    texlive-xetex"
	    ;;
    esac
else
    DOC_DEPENDS=''
fi

MODUTILS_DEPENDS=kmod
PYTHON_PACKAGING_DEPENDS=dh-python
PYTHON_GST=python3-gst-1.0,gstreamer1.0-plugins-base
TCLTK_VERSION=8.6
PYTHON_IMAGING=python3-pil
PYTHON_IMAGING_TK=python3-pil.imagetk
QTVCP_DEPENDS="python3-pyqt5,\n    python3-pyqt5.qsci,\n    python3-pyqt5.qtsvg,\n    python3-pyqt5.qtopengl,\n    python3-opencv,\n    python3-dbus,\n    python3-espeak,\n    python3-dbus.mainloop.pyqt5,\n    python3-pyqt5.qtwebengine | python3-pyqt5.qtwebkit,\n    espeak-ng,\n    pyqt5-dev-tools,\n    gstreamer1.0-tools,\n    espeak,\n    sound-theme-freedesktop,\n    python3-poppler-qt5"
YAPPS_RUNTIME="python3-yapps"
DEBHELPER="debhelper (>= 12)"
COMPAT="12"

case $DISTRIB_NAME in
    Ubuntu-21.*|Debian-11|Debian-11.*|Debian-12|Debian-12.*|Debian-13|Debian-13.*|Debian-testing|Debian-unstable)
        LIBREADLINE_DEV=libeditreadline-dev
        COMPAT=""
        DEBHELPER="debhelper-compat (= 13)"
        ;;
    Ubuntu-20.*)
        ;;
    Debian-10|Debian-10.*|Raspbian-10|Raspbian-10.*)
        ;;
    *)
        echo "unknown distribution: $DISTRIB_NAME"
        echo "detected dependencies may be incomplete or wrong"
        echo "please consider fixing it and submitting a pull request"
        ;;
esac

TARGET=uspace
EXTRA_RECOMMENDS=hostmot2-firmware-all
MODULE_PATH=usr/lib/linuxcnc/modules
MODULE_EXT=.so
KERNEL_DEPENDS=libudev-dev,iptables
KERNEL_DEPENDS_BUILD=libudev-dev
KERNEL_HEADERS=
KERNEL_VERSION=uspace
MODUTILS_DEPENDS=
if false; then
MAIN_PACKAGE_NAME=linuxcnc
OTHER_MAIN_PACKAGE_NAME=linuxcnc-uspace
else
DISTRIB_NAME=uspace-$DISTRIB_NAME
MAIN_PACKAGE_NAME=linuxcnc-uspace
OTHER_MAIN_PACKAGE_NAME=linuxcnc
fi

EXTRA_RECOMMENDS="$EXTRA_RECOMMENDS, linux-image-rt-amd64 [linux-amd64], linux-image-rt-686-pae [linux-i386]"
CONFIGURE_REALTIME_ARG=--with-realtime=uspace

subst () {
sed \
    -e "s#@COMPAT@#$COMPAT#g" \
    -e "s#@DEBHELPER@#$DEBHELPER#g" \
    -e "s#@DISTRIB_NAME@#$DISTRIB_NAME#g" \
    -e "s#@DOC_DEPENDS@#$DOC_DEPENDS#g" \
    -e "s#@EXTRA_BUILD@#$EXTRA_BUILD#g" \
    -e "s#@EXTRA_RECOMMENDS@#$EXTRA_RECOMMENDS#g" \
    -e "s#@KERNEL_DEPENDS@#$KERNEL_DEPENDS#g" \
    -e "s#@KERNEL_DEPENDS_BUILD@#$KERNEL_DEPENDS_BUILD#g" \
    -e "s#@KERNEL_HEADERS@#$KERNEL_HEADERS#g" \
    -e "s#@KERNEL_VERSION@#$KERNEL_VERSION#g" \
    -e "s#@LIBREADLINE_DEV@#$LIBREADLINE_DEV#g" \
    -e "s#@MAIN_PACKAGE_NAME@#$MAIN_PACKAGE_NAME#g" \
    -e "s#@MODULE_EXT@#$MODULE_EXT#g" \
    -e "s#@MODULE_PATH@#$MODULE_PATH#g" \
    -e "s#@MODUTILS_DEPENDS@#$MODUTILS_DEPENDS#g" \
    -e "s#@OTHER_MAIN_PACKAGE_NAME@#$OTHER_MAIN_PACKAGE_NAME#g" \
    -e "s#@PYTHON_GST@#$PYTHON_GST#g" \
    -e "s#@PYTHON_IMAGING@#$PYTHON_IMAGING#g" \
    -e "s#@PYTHON_IMAGING_TK@#$PYTHON_IMAGING_TK#g" \
    -e "s#@PYTHON_PACKAGING_DEPENDS@#$PYTHON_PACKAGING_DEPENDS#g" \
    -e "s#@PYTHON_VERSION_NEXT@#$PYTHON_VERSION_NEXT#g" \
    -e "s#@QTVCP_DEPENDS@#$QTVCP_DEPENDS#g" \
    -e "s#@RTAI_ARCHITECTURE@#$RTAI_ARCHITECTURE#g" \
    -e "s#@TARGET@#$TARGET#g" \
    -e "s#@CONFIGURE_REALTIME_ARG@#$CONFIGURE_REALTIME_ARG#g" \
    -e "s#@TCLTK_VERSION@#$TCLTK_VERSION#g" \
    -e "s#@XENOMAI_ARCHITECTURE@#$XENOMAI_ARCHITECTURE#g" \
    -e "s|@YAPPS_RUNTIME@|$YAPPS_RUNTIME|g" \
    -e "s#@ENABLE_BUILD_DOCUMENTATION@#$ENABLE_BUILD_DOCUMENTATION#g" \
    -e '/^\s*,\s*$/d' \
    $*
}

if [[ -z "${COMPAT}" ]]; then
    rm -f compat
else
    subst compat.in > compat
fi

subst control.top.in > control

echo >> control
subst control.main-pkg.in >> control

subst linuxcnc.install.in > ${MAIN_PACKAGE_NAME}.install
subst linuxcnc.lintian-overrides.in > ${MAIN_PACKAGE_NAME}.lintian-overrides
subst linuxcnc.manpages.in > ${MAIN_PACKAGE_NAME}.manpages

subst rules.in > rules
chmod +x rules

if [ -n "$ENABLE_BUILD_DOCUMENTATION" ]; then
    subst control.docs.in >> control
fi


rm -f ../build-stamp
echo "Successfully configured for '$DISTRIB_NAME'."
