#!/bin/bash

# Slackware build script for linphone-desktop

# Copyright 2023, Lockywolf
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
# permitted provided that the following conditions are met:
#
# 1. Redistributions of this script must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
#
#  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS 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 AUTHOR 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.

# Warning! This build _requires_ that linphone-desktop be _uninstalled_ before
# building.

cd $(dirname $0) ; CWD=$(pwd)

PRGNAM=linphone-desktop
VERSION=${VERSION:-5.2.6}
PKGVERSION=${PKGVERSION:-5.2.6}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
PKGTYPE=${PKGTYPE:-tgz}

if [ -z "$ARCH" ]; then
  case "$( uname -m )" in
    i?86) ARCH=i586 ;;
    arm*) ARCH=arm ;;
       *) ARCH=$( uname -m ) ;;
  esac
fi

if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
  echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE"
  exit 0
fi

TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}

if [ "$ARCH" = "i586" ]; then
  SLKCFLAGS="-O2 -march=i586 -mtune=i686"
  LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
  SLKCFLAGS="-O2 -march=i686 -mtune=i686"
  LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
  SLKCFLAGS="-O2 -fPIC"
  LIBDIRSUFFIX="64"
elif [ "$ARCH" = "aarch64" ]; then
  SLKCFLAGS="-O2 -fPIC"
  LIBDIRSUFFIX="64"
else
  SLKCFLAGS="-O2"
  LIBDIRSUFFIX=""
fi

source /etc/profile.d/cmake-opt.sh

if [[ -e /opt/$PRGNAM/bin/linphone ]] ; then
  printf "This script cannot run if %s is already installed. Uninstall it first.\n" "$PRGNAM" 1>&2
  exit 1
fi

set -e

rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-$PKGVERSION
tar xvf $CWD/$PRGNAM-$PKGVERSION.tar.gz
cd $PRGNAM-$PKGVERSION

modulepaths=( external/qtkeychain \
               external/ispell \
               linphone-sdk \
               linphone-sdk/bcg729 \
               linphone-sdk/bcmatroska2 \
               linphone-sdk/bctoolbox \
               linphone-sdk/bcunit \
               linphone-sdk/belcard \
               linphone-sdk/belle-sip \
               linphone-sdk/belr \
               linphone-sdk/bzrtp \
               linphone-sdk/external/aom \
               linphone-sdk/external/bv16-floatingpoint \
               linphone-sdk/external/codec2 \
               linphone-sdk/external/dav1d \
               linphone-sdk/external/decaf \
               linphone-sdk/external/ffmpeg \
               linphone-sdk/external/gsm \
               linphone-sdk/external/jsoncpp \
               linphone-sdk/external/libjpeg-turbo \
               linphone-sdk/external/liboqs \
               linphone-sdk/external/libvpx \
               linphone-sdk/external/libxml2 \
               linphone-sdk/external/libyuv \
               linphone-sdk/external/mbedtls \
               linphone-sdk/external/opencore-amr \
               linphone-sdk/external/openh264 \
               linphone-sdk/external/openldap \
               linphone-sdk/external/opus \
               linphone-sdk/external/soci \
               linphone-sdk/external/speex \
               linphone-sdk/external/sqlite3 \
               linphone-sdk/external/srtp \
               linphone-sdk/external/vo-amrwbenc \
               linphone-sdk/external/xerces-c \
               linphone-sdk/external/zlib \
               linphone-sdk/external/zxing-cpp \
               linphone-sdk/liblinphone \
               linphone-sdk/lime \
               linphone-sdk/mediastreamer2 \
               linphone-sdk/msaaudio \
               linphone-sdk/msamr \
               linphone-sdk/msandroidcamera2 \
               linphone-sdk/mscodec2 \
               linphone-sdk/msoboe \
               linphone-sdk/msopenh264 \
               linphone-sdk/mssilk \
               linphone-sdk/mswasapi \
               linphone-sdk/mswebrtc \
               linphone-sdk/ortp \
               linphone-sdk/postquantumcryptoengine\
               linphone-sdk/msoboe/oboe\
               linphone-sdk/mswebrtc/webrtc)

# packagenames=( qtkeychain-bb47857aed7c3e9a66902ff681680a79f44e81e5.tar.gz \
# ispell-05574fe160222c3d0b6283c1433c9b087271fad1 \
#                  linphone-sdk-5e9455e658e51bd3e23d07479ac27f9144b06075.tar.gz \
#                  bcg729-faaa895862165acde6df8add722ba4f85a25007d.tar.gz \
#                  bcmatroska2-4d125bf2788915325c5ab93b9a97835f96d566d3.tar.gz \
#                  bctoolbox-c2888c536b06b114cd36caf652e71394639e9e37.tar.gz \
#                  bcunit-e9101548b1aba4298a18c3817ebee053c7f3a0a7.tar.gz \
#                  belcard-f50f203d6a44b6ec3bfd897d8057a94dfefa3e57.tar.gz \
#                  belle-sip-ac2a77241d528f578b671b75c86a085fd9059d55.tar.gz \
#                  belr-4a0cf1debc2dfc211491a599501fac35ba11b233.tar.gz \
#                  bzrtp-bf66d442d1881eff4310ce9516e25f2616adfd35.tar.gz \
#                  bv16-floatingpoint-c64804e46b2edd6a941db7f1b28233c5735a4479.tar.gz \
#                  codec2-4e154e6bbbe92cc76e333a0b4acb365b5c042ec6.tar.gz \
#                  decaf-876ddb4d465c94f97beba1be450e8538d866cc5d.tar.gz \
#                  ffmpeg-8b92b3898b00cc214e81f39cc9f020c2ce69c533.tar.gz \
#                  gsm-5b603ccf4620d76c9e642ca8c4560e3c43650017.tar.gz \
#                  b1bd848241880ccea2d940f67343a899b9f65d5d.tar.gz \
#                  libjpeg-turbo-d4da2a4869361c82b61188f00a1fb0085ddae748.tar.gz \
#                  liboqs-fe69ee473c878a3f015f405000877c5eb1de8996.tar.gz \
#                  libvpx-894d0f3b1e0e4224fc3c353a224ffb770c31d48c.tar.gz \
#                  libxml2-3efe42fd5facc2b476e8f5f288ef241930160e79.tar.gz \
#                  libyuv-7f813af29c72e531a3a0394252c328ec8c5245c0.tar.gz \
#                  mbedtls-a4f4f947c1c1dbaba7052a96eb4995a75aa4e523.tar.gz \
#                  opencore-amr-8731a39f6e805e4537153541e165da34d9fa93bd.tar.gz \
#                  openh264-b16b12c031362bbe605549eec39922521b61fc72.tar.gz \
#                  openldap-2bca580b6b2ef22c44fbeaeabac6cbdc7c4756e7.tar.gz \
#                  opus-a97fe72ad43d51f103a3b508b6302c587435317b.tar.gz \
#                  soci-bc4f22657b9f2ce6cfe15d904b9fa54ee79b8a06.tar.gz \
#                  speex-c8fcd72ef8d29bc913b0f384c9d8578b3e59718b.tar.gz \
#                  sqlite3-953ffcf472e7ced41003b6ec5be040b9f815df79.tar.gz \
#                  srtp-2481874bc4c24cdcc16577313d9460f8423dc57c.tar.gz \
#                  vo-amrwbenc-36dd497b9a570968b7ffaf74613334bc41d94199.tar.gz \
#                  xerces-c-27f09a04c5c02921e69210067ac14bb9e31091b9.tar.gz \
#                  zlib-affdc78f119e43bb4277e4c16488dd281a2163b0.tar.gz \
#                  zxing-cpp-2050520071cb798a1712d4d6f43e45ab94550660.tar.gz \
#                  liblinphone-616e0cbb66f3e09145765247419071ce092a47f6.tar.gz \
#                  lime-de7c88d8a4fee9e54b99438cd38da2784bdfb046.tar.gz \
#                  mediastreamer2-e30db5cbd3a9290a7a9a645523e414b3678b0895.tar.gz \
#                  msaaudio-a44089d176e52f73d15de444fddb9497e5103de4.tar.gz \
#                  msamr-e23b62f1556118563cbdf2e4abb2a0b15a296624.tar.gz \
#                  msandroidcamera2-6761b14dacd8ed8299240c5a1911ceacc8ad5708.tar.gz \
#                  mscodec2-30d88f890897a8d82a4b195591045e9fe5cf7208.tar.gz \
#                  msoboe-11d0f703482ddc11d9d15ec81ed8c97d2d9bd317.tar.gz \
#                  msopenh264-5c7a9522478f5eedc9a3e1600fdd705da1e00d23.tar.gz \
#                  mssilk-ff9ddf985266bf25ba2dcd3256172fa0ab52e4b1.tar.gz \
#                  mswasapi-c8a851cc1358b860a93b42c17b267d1d8f6952b8.tar.gz \
#                  mswebrtc-80b8e33b11516870b887b80279b9da4de8b26ebe.tar.gz \
#                  mswinrtvid-384dba6ff7ac37f4123f1f02b9b7b2bc40784dc4.tar.gz \
#                  ortp-6e05272d70456ef8a84684572a3bb847873ec176.tar.gz \
#                  postquantumcryptoengine-0f71ffb829102cce337ed5cdc42c5a57d06791ab.tar.gz\
#                  oboe-5975ab04b02861dc126f3c8fd687321520cd8ae4.tar.gz \
#                  webrtc-583acd27665cfadef8ab03eb85a768d308bd29dd.tar.gz)

# unpackeddirname=( qtkeychain-bb47857aed7c3e9a66902ff681680a79f44e81e5 \
#                     ispell-05574fe160222c3d0b6283c1433c9b087271fad1 \
#                     linphone-sdk-5e9455e658e51bd3e23d07479ac27f9144b06075 \
#                     bcg729-faaa895862165acde6df8add722ba4f85a25007d \
#                  bcmatroska2-4d125bf2788915325c5ab93b9a97835f96d566d3 \
#                  bctoolbox-c2888c536b06b114cd36caf652e71394639e9e37 \
#                  bcunit-e9101548b1aba4298a18c3817ebee053c7f3a0a7 \
#                  belcard-f50f203d6a44b6ec3bfd897d8057a94dfefa3e57 \
#                  belle-sip-ac2a77241d528f578b671b75c86a085fd9059d55 \
#                  belr-4a0cf1debc2dfc211491a599501fac35ba11b233 \
#                  bzrtp-bf66d442d1881eff4310ce9516e25f2616adfd35 \
#                  bv16-floatingpoint-c64804e46b2edd6a941db7f1b28233c5735a4479 \
#                  codec2-4e154e6bbbe92cc76e333a0b4acb365b5c042ec6 \
#                  decaf-876ddb4d465c94f97beba1be450e8538d866cc5d \
#                  ffmpeg-8b92b3898b00cc214e81f39cc9f020c2ce69c533 \
#                  gsm-5b603ccf4620d76c9e642ca8c4560e3c43650017 \
#                  jsoncpp-b1bd848241880ccea2d940f67343a899b9f65d5d \
#                  libjpeg-turbo-d4da2a4869361c82b61188f00a1fb0085ddae748 \
#                  liboqs-fe69ee473c878a3f015f405000877c5eb1de8996 \
#                  libvpx-894d0f3b1e0e4224fc3c353a224ffb770c31d48c \
#                  libxml2-3efe42fd5facc2b476e8f5f288ef241930160e79 \
#                  libyuv-7f813af29c72e531a3a0394252c328ec8c5245c0 \
#                  mbedtls-a4f4f947c1c1dbaba7052a96eb4995a75aa4e523 \
#                  opencore-amr-8731a39f6e805e4537153541e165da34d9fa93bd \
#                  openh264-b16b12c031362bbe605549eec39922521b61fc72 \
#                  openldap-2bca580b6b2ef22c44fbeaeabac6cbdc7c4756e7 \
#                  opus-a97fe72ad43d51f103a3b508b6302c587435317b \
#                  soci-bc4f22657b9f2ce6cfe15d904b9fa54ee79b8a06 \
#                  speex-c8fcd72ef8d29bc913b0f384c9d8578b3e59718b \
#                  sqlite3-953ffcf472e7ced41003b6ec5be040b9f815df79 \
#                  srtp-2481874bc4c24cdcc16577313d9460f8423dc57c \
#                  vo-amrwbenc-36dd497b9a570968b7ffaf74613334bc41d94199 \
#                  xerces-c-27f09a04c5c02921e69210067ac14bb9e31091b9 \
#                  zlib-affdc78f119e43bb4277e4c16488dd281a2163b0 \
#                  zxing-cpp-2050520071cb798a1712d4d6f43e45ab94550660 \
#                  liblinphone-616e0cbb66f3e09145765247419071ce092a47f6 \
#                  lime-de7c88d8a4fee9e54b99438cd38da2784bdfb046 \
#                  mediastreamer2-e30db5cbd3a9290a7a9a645523e414b3678b0895 \
#                  msaaudio-a44089d176e52f73d15de444fddb9497e5103de4 \
#                  msamr-e23b62f1556118563cbdf2e4abb2a0b15a296624 \
#                  msandroidcamera2-6761b14dacd8ed8299240c5a1911ceacc8ad5708 \
#                  mscodec2-30d88f890897a8d82a4b195591045e9fe5cf7208 \
#                  msoboe-11d0f703482ddc11d9d15ec81ed8c97d2d9bd317 \
#                  msopenh264-5c7a9522478f5eedc9a3e1600fdd705da1e00d23 \
#                  mssilk-ff9ddf985266bf25ba2dcd3256172fa0ab52e4b1 \
#                  mswasapi-c8a851cc1358b860a93b42c17b267d1d8f6952b8 \
#                  mswebrtc-80b8e33b11516870b887b80279b9da4de8b26ebe \
#                  mswinrtvid-384dba6ff7ac37f4123f1f02b9b7b2bc40784dc4 \
#                  ortp-6e05272d70456ef8a84684572a3bb847873ec176 \
#                  postquantumcryptoengine-0f71ffb829102cce337ed5cdc42c5a57d06791ab\
#                  webrtc-583acd27665cfadef8ab03eb85a768d308bd29dd)

packagenames=( qtkeychain \
                 ispell \
                 linphone-sdk \
                 bcg729 \
                 bcmatroska2 \
                 bctoolbox \
                 bcunit \
                 belcard \
                 belle-sip \
                 belr \
                 bzrtp \
                 aom \
                 bv16-floatingpoint \
                 codec2 \
                 dav1d \
                 decaf \
                 ffmpeg \
                 gsm \
                 jsoncpp \
                 libjpeg-turbo \
                 liboqs \
                 libvpx \
                 libxml2 \
                 libyuv \
                 mbedtls \
                 opencore-amr \
                 openh264 \
                 openldap \
                 opus \
                 soci \
                 speex \
                 sqlite3 \
                 srtp \
                 vo-amrwbenc \
                 xerces-c \
                 zlib \
                 zxing-cpp \
                 liblinphone \
                 lime \
                 mediastreamer2 \
                 msaaudio \
                 msamr \
                 msandroidcamera2 \
                 mscodec2 \
                 msoboe \
                 msopenh264 \
                 mssilk \
                 mswasapi \
                 mswebrtc \
                 ortp \
                 postquantumcryptoengine\
                 oboe \
                 webrtc)


for i in "${!modulepaths[@]}" ; do
  echo "${!modulepaths[@]}"
  tar xvf "$CWD"/"${packagenames[i]}"*
  rmdir "${modulepaths[i]}"
  ln -s "$(pwd)"/"${packagenames[i]}"* "${modulepaths[i]}"
done
git init >> /dev/null
git config user.email "dummy@example.test"
git config user.name "Example"
git add README.md
git commit -m "$PKGVERSION" > /dev/null
git tag -m "$PKGVERSION" "$PKGVERSION"
echo ""


chown -R root:root .
find -L . \
 \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
  -o -perm 511 \) -exec chmod 755 {} + -o \
 \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
  -o -perm 440 -o -perm 400 \) -exec chmod 644 {} + || true

my_parallel="${MAKEFLAGS##-j}"
my_parallel="${my_parallel:-1}"


sed -i 's/-Wunused-parameter//g' linphone-sdk/liblinphone/CMakeLists.txt || exit 200
sed -i '/bc_apply_compile_flags/d' linphone-sdk/liblinphone/console/CMakeLists.txt || exit 200

sed -i 's/cmake_minimum_required(VERSION 3.22)/cmake_minimum_required(VERSION 3.30.5)/g' CMakeLists.txt

sed -i 's/add_dependencies(sdk opencore-amr)/add_dependencies(sdk opencore-amrwb opencore-amrnb)/g' linphone-sdk/cmake/ExternalDependencies.cmake
sed -i 's/add_dependencies(sdk vo_amrwbenc)/add_dependencies(sdk vo-amrwbenc)/g' linphone-sdk/cmake/ExternalDependencies.cmake



mkdir -p build
cd build
  cmake -G Ninja \
    -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \
    -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS -Wno-error=unused-parameter" \
    -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
    -DLIB_SUFFIX=${LIBDIRSUFFIX} \
    -DMAN_INSTALL_DIR=/usr/man \
    -DCMAKE_INSTALL_PREFIX=/usr \
    -DENABLE_TOOLS=ON \
    -DENABLE_PQCRYPTO=ON \
    -DENABLE_SOCI_MYSQL=ON \
    -DENABLE_MDNS=ON \
    -DENABLE_AMRNB=ON \
    -DENABLE_AMRWB=ON \
    -DENABLE_CODEC2=ON \
    -DENABLE_G726=ON -DENABLE_G729=ON -DENABLE_G729B_CNG=ON \
    -DENABLE_ILBC=ON -DENABLE_ISAC=ON \
    -DENABLE_SILK=ON \
    -DENABLE_WEBRTC_VAD=ON -DENABLE_X264=ON \
    -DENABLE_QRCODE=ON \
    -DENABLE_RTP_MAP_ALWAYS_IN_SDP=ON \
    -DENABLE_FFMPEG=ON \
    -DENABLE_NON_FREE_FEATURES=ON \
    -DENABLE_OPENH264=ON \
    -DENABLE_H263=ON -DENABLE_H263P=ON \
    -DDNSSD_ROOT=/usr/include/avahi-compat-libdns_sd/ \
    -DENABLE_MDNS=ON \
    -DENABLE_NLS=ON \
    -DENABLE_STRICT=NO \
    -DENABLE_GTK_UI=ON \
    -DENABLE_DAEMON=ON \
    -DENABLE_GPL_THIRD_PARTIES=ON \
    -DENABLE_LIME_X3DH=ON \
    -DENABLE_CONSOLE_UI=ON \
    -DCMAKE_BUILD_TYPE=Release ..

  cmake --build .
  cmake --install . --prefix $PKG/opt/linphone-desktop
  cd ..

  chmod +x $PKG/opt/linphone-desktop/lib$LIBDIRSUFFIX/*.so*

  (
    mkdir -p $PKG/usr/bin
    cd $PKG/usr/bin
    ln -sr ../../opt/$PRGNAM/bin/linphone $PRGNAM
  )

rm -f $PKG/{,usr/}lib${LIBDIRSUFFIX}/*.la

find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \
  | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true

mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
cp -a \
  README.md LICENSE.txt CHANGELOG.md \
  $PKG/usr/doc/$PRGNAM-$VERSION
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild

mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc

cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE
