#!/bin/bash

# Slackware build script for apulse

# Originally written by: Ryan P.C. McQuen | Everett, WA | <email removed>
# Heavily modified and now maintained by B. Watson <yalhcru@gmail.com>

# Licensed under the WTFPL. See http://www.wtfpl.net/txt/copying/ for details.

# 20210301 bkw:
# - Take over maintenance.
# - Replace Capi X's version (submitted in 2019) with Ryan's (removed
#   in 2016), since it supports multilib and by default doesn't stomp
#   on the system pulseaudio libs. Add the ability to install the
#   headers and .pc files, like Capi's build did, but disable it by
#   default (SYSTEM variable).
# - Relicense as WTFPL, with permission from original author (Ryan).
# - i486 => i586.
# - Rewrite README to document the new stuffs.
# - Simplify the script a bit.
# - Actually use SLKCFLAGS.
# - Upstream ships a man page now, install it to /usr/man.

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

PRGNAM=apulse
VERSION=${VERSION:-0.1.13}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
PKGTYPE=${PKGTYPE:-tgz}

SYSTEM=${SYSTEM:-no}
[ "$SYSTEM" = "devel" ] && HEADERS=yes
case "$SYSTEM" in
  yes|devel) AP_SUBDIR=${AP_SUBDIR:-/}      
             COEXIST="CONFLICTS" ;;
  no)        AP_SUBDIR=${AP_SUBDIR:-/apulse}
             COEXIST="can safely coexist" ;;
  *) echo "*** Invalid SYSTEM setting '$SYSTEM', use one of: no yes devel" 1>&2
     exit 1 ;;
esac

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"
  # automatically detect multilib, can override with COMPAT32=no
  [ -e /lib/libc.so.6 ] && COMPAT32="${COMPAT32:-yes}"
else
  SLKCFLAGS="-O2"
  LIBDIRSUFFIX=""
fi

set -e

buildit() {
  rm -rf build
  mkdir -p build
  cd build
    cmake \
      -DAPULSEPATH=/usr/lib$2${AP_SUBDIR} \
      -DAPULSE_SEARCH_PATHS=/usr/lib${AP_SUBDIR}:/usr/lib${LIBDIRSUFFIX}${AP_SUBDIR} \
      -DCMAKE_INSTALL_PREFIX=/usr \
      -DCMAKE_BUILD_TYPE=Release \
      -DCMAKE_CXX_FLAGS_RELEASE="$SLKCFLAGS $1 -DNDEBUG" \
      -DCMAKE_C_FLAGS_RELEASE="$SLKCFLAGS $1 -DNDEBUG" \
      ..
    make VERBOSE=1
    make install/strip DESTDIR=$PKG
  cd -
}

install_pc() {
  mkdir -p $PKG/usr/lib$1/pkgconfig
  for i in $CWD/pc/*.pc; do
    sed "s,@64@,$1,g" $i > $PKG/usr/lib$1/pkgconfig/$( basename $i )
  done
}

rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-$VERSION
tar xvf $CWD/$PRGNAM-$VERSION.tar.gz
cd $PRGNAM-$VERSION
chown -R root:root .
find -L .  -perm /111 -a \! -perm 755 -a -exec chmod 755 {} \+ -o \
        \! -perm /111 -a \! -perm 644 -a -exec chmod 644 {} \+

# hardcoded, can't override on cmake command line.
sed -i 's,share/man/,man/,' CMakeLists.txt

# for compat32, we assume x86_64 CPUs handle i686 instructions. also,
# unlike normal 32-bit packages, this one gets -fPIC (which won't hurt).
[ "$COMPAT32" = "yes" ] && buildit "-m32 -march=i686 -mtune=i686" ""

# either way, build the normal libraries with normal cflags.
buildit "" "$LIBDIRSUFFIX"

gzip -9 $PKG/usr/man/*/*

if [ "$HEADERS" = "yes" ]; then
  mkdir -p $PKG/usr/include
  cp -a 3rdparty/pulseaudio-headers/pulse $PKG/usr/include
  install_pc "$LIBDIRSUFFIX"
  [ "$COMPAT32" = "yes" ] && install_pc ""
fi

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

mkdir -p $PKG/install
sed "s,@COEXIST@,$COEXIST," $CWD/slack-desc > $PKG/install/slack-desc

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