#!/bin/bash
ulimit -s unlimited
shopt -s extglob

# pkgtools.SlackBuild
# by Stuart Winter <mozes@slackware.com> for the Slackware porting Project.
# Heavily based on the original Slackware build script.
# 06-Jun-2004
#
# Copyright 2005-2025  Patrick J. Volkerding, Sebeka, MN, USA
# 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.

# Record toolchain & other info for the build log:
slackbuildinfo

# Paths to skeleton port's source & real Slackware source tree:
slackset_var_cwds

# Temporary build locations:
export TMPBUILD=$TMP/build-$PKGNAM
export PKG=$TMP/package-$PKGNAM
mkpkgdirs # Delete & re-create temporary directories then cd into $TMPBUILD

######## Slackware pkgtools #############################################

# Install Slackware script manpages:
( cd $CWD/manpages
  mkdir -p $PKG/usr/man/man8
  for page in explodepkg.8 installpkg.8 makepkg.8 upgradepkg.8 pkgtool.8 pkgdiff.8 \
    removepkg.8 ; do
    cat $page | gzip -9c > $PKG/usr/man/man8/$page.gz
  done
)

# Install internationalized manpages from
# http://slint.fr/forSlackware/man_l10n/pkgtools/
( cd $PKG/usr/man
  tar xvvf $CWD/manpages-l10n.tar.!(*sign|*asc|*sig)
  for page in manpages-l10n/* ; do
    manpage=$(basename $page)
    mkdir -vpm755 ${manpage%%.*}/man8
    mv -fv $page ${manpage%%.*}/man8/${page#*.}.8
  done
  rmdir manpages-l10n
)
# Install Slackware scripts:
( cd $CWD/scripts
  mkdir -p $PKG/sbin
  # Don't include makebootdisk...  it's useless since a kernel won't fit on a
  # floppy disk, and nobody uses floppies any more anyway.
  for file in explodepkg installpkg makepkg pkgtool removepkg upgradepkg pkgdiff ; do
    install -oroot -groot -pm755 $CWD/scripts/$file $PKG/sbin
  done
  # These scripts are used during the installation:
  mkdir -pm700 $PKG/var/lib/pkgtools/setup/tmp
  for file in setup.* ; do
    install -pm755 -oroot -groot $file $PKG/var/lib/pkgtools/setup/
  done
  # Add a link for makebootstick -- don't because we don't ship it with ARM.
  # ( cd $PKG/sbin ; ln -sf ../var/lib/pkgtools/setup/setup.80.make-bootdisk makebootstick )

  # Not shipped on ARM - our OS InitRD system doesn't support this.
  #/boot/kernel-backup: with the huge kernel gone, this script seeks to fill the
  #gap by offering an easy way to make a backup kernel that will be picked up
  #by update-grub. It does this by creating entries in the pkgtools database
  #that protect a kernel, modules, and optionally an initrd from being removed
  #when the kernel-generic package is upgraded. See the script for details.
  #cp -a $CWD/scripts/make-kernel-backup $PKG/boot
  #chown root:root $PKG/boot/make-kernel-backup
  #chmod 755 $PKG/boot/make-kernel-backup
  ## Symlink it into the $PATH:
  #mkdir -p $PKG/usr/sbin
  #( cd $PKG/usr/sbin ; ln -sf /boot/make-kernel-backup . )

)

# Create the base directories (not really necessary, but doesn't hurt):
mkdir -p $PKG/var/lib/pkgtools/{packages,scripts,douninst.sh}
mkdir -p $PKG/var/log/pkgtools/{removed_packages,removed_scripts}

########################################################################

# This is x86 stuff:
rm -fv $PKG/sbin/makebootdisk
rm -fv $PKG/var/lib/pkgtools/setup/*.make-bootdisk
rm -fv $PKG/var/lib/pkgtools/setup/*.install-kernel

# Apply generic Slackware packaging policies:
cd $PKG
slackstripall   # strip all .a archives and all ELFs
slack_delete_lafiles # delete usr/lib{,64}/*.la
slackgzpages -i # compress man & info pages and delete usr/info/dir
slackslack      # chown -R root:root, chmod -R og-w, slackchown, slack644docs
slackdesc       # install slack-desc and doinst.sh
slackmp         # run makepkg -l y -c n

# Perform any final checks on the package:
cd $PKG
slackhlinks     # search for any hard links
