repo/templates/old/template.SlackBuild-0.5.0

240 lines
9.3 KiB
Bash
Executable file

#!/bin/bash
# Version: 0.5.0
# Copyright (c) 2005-2016:
# Darren 'Tadgy' Austin <darren (at) afterdark.org.uk>
# Licensed under the terms of the GNU General Public License version 3.
#
# Required sources:
# FIXME
#
# Source file details.
SRCFILE_NAME=""
SRCFILE_DELIM=""
SRCFILE_VERSION=""
SRCFILE_EXT=""
# Unpacked source directory details.
SRCDIR_NAME="$SRCFILE_NAME"
SRCDIR_DELIM="$SRCFILE_DELIM"
SRCDIR_VERSION="$SRCFILE_VERSION"
# Built package details.
PKG_NAME="$(basename "$BASH_SOURCE" .SlackBuild)"
PKG_VERSION="${SRCFILE_VERSION:-$SRCDIR_VERSION}"
PKG_BUILD=""
PKG_TAG="_da"
PKG_EXT="txz"
# Packages which must be installed to build.
BUILD_REQUIRED=""
# Packages which must not be installed to build.
BUILD_CONFLICTS="$PKG_NAME"
#........1.........2.........3.........4.........5.........6.........7.........8.........9.........0.........1.........2
cd $(cd "${BASH_SOURCE%/*}"; pwd -P)
while [[ $# -gt 0 ]]; do
if [[ "$1" =~ ^-(-)?(f|force)$ ]]; then
BUILD_FORCE=1
elif [[ "$1" =~ ^-(-)?(n|no-cleanup)$ ]]; then
BUILD_NOCLEANUP=1
else
echo "Usage: ${0##*/} [-f|--force] [-n|--no-cleanup]"; exit 1
fi
shift
done
if [[ "$BUILD_FORCE" != "1" ]]; then
check_installed() {
ls -1 /var/log/packages | grep -P "^\Q${1}\E-([^-]*)-([^-]*)-([^-]*)$" >/dev/null 2>&1
return $?
}
for PKG in $BUILD_CONFLICTS; do
if check_installed "$PKG"; then
echo "${0##*/}: Conflicting package '$PKG' installed."; exit 1
fi
done
for PKG in $BUILD_REQUIRED; do
if ! check_installed "$PKG"; then
echo "${0##*/}: Required package '$PKG' not installed."; exit 1
fi
done
fi
declare BUILD_OS_$(grep "^ID=" /etc/os-release)
declare BUILD_OS_$(grep "^VERSION_ID=" /etc/os-release)
[[ -e ../build.options ]] && {
. ../build.options || exit 1
}
BUILD_WORKDIR="${BUILD_WORKDIR:-/tmp}/pkg-build"
BUILD_ROOT="$BUILD_WORKDIR/$PKG_NAME"
BUILD_PREFIX="${BUILD_PREFIX:-/usr}" # Slackware standard prefix.
BUILD_MAKEFLAGS="${BUILD_MAKEFLAGS:--j6}"
case "${BUILD_ARCH:=$(uname -m)}" in
i[45]86)
BUILD_CFLAGS="${BUILD_CFLAGS:--march=$BUILD_ARCH -mtune=${BUILD_TUNE:-i686} -O2}"
PKG_ARCH="$BUILD_ARCH"
;;
i686)
BUILD_CFLAGS="${BUILD_CFLAGS:--march=$BUILD_ARCH -mtune=${BUILD_TUNE:-pentium4} -O2}"
PKG_ARCH="$BUILD_ARCH"
;;
x86_64|x86-64)
BUILD_CFLAGS="${BUILD_CFLAGS:--march=x86-64 -mtune=${BUILD_TUNE:-core2} -O2 -fPIC}"
BUILD_LIBDIRSUFFIX="${BUILD_LIBDIRSUFFIX:-64}"
PKG_ARCH="x86_64"
;;
*)
echo "${0##*/}: ${BUILD_ARCH:-$(uname -m)}: unsupported architecture."; exit 1
;;
esac
PKG_STORE="$(cd ${PKG_STORE:-../../packages}; pwd -P)/$BUILD_OS_ID$BUILD_LIBDIRSUFFIX-$BUILD_OS_VERSION_ID"
SRC_DIR="$(pwd)"
umask 0022 &&
rm -rf "$BUILD_ROOT" "$BUILD_WORKDIR/$SRCDIR_NAME$SRCDIR_DELIM$SRCDIR_VERSION" &&
mkdir -p -m 750 "$BUILD_WORKDIR" &&
mkdir -m 755 "$BUILD_ROOT" || exit 1
case "$SRCFILE_EXT" in
tar.gz|tgz) SRCFILE_DECOMP="gzip" ;;&
tar.bz|tar.bz2|tbz) SRCFILE_DECOMP="bzip2" ;;&
tar.xz|tar.lz|txz|tlz) SRCFILE_DECOMP="lzma" ;;&
tar.*|tgz|tbz|txz|tlz) tar -xv "--$SRCFILE_DECOMP" -C "$BUILD_WORKDIR" \
-f "$SRC_DIR/$SRCFILE_NAME$SRCFILE_DELIM$SRCFILE_VERSION.$SRCFILE_EXT" || exit 1 ;;
zip|ZIP) unzip -d "$BUILD_WORKDIR" "$SRC_DIR/$SRCFILE_NAME$SRCFILE_DELIM$SRCFILE_VERSION.$SRCFILE_EXT" || exit 1 ;;
*) echo "${0##*/}: $SRCFILE_EXT: unknown archive format."; exit 1 ;;
esac
cd "$BUILD_WORKDIR/$SRCDIR_NAME$SRCDIR_DELIM$SRCDIR_VERSION" &&
chown -R root:root . &&
chmod -R go-w . || exit 1
# zcat $SRC_DIR/FIXME.patch.gz | patch -p0 || exit 1
CFLAGS="$BUILD_CFLAGS" CXXFLAGS="${BUILD_CXXFLAGS:-$BUILD_CFLAGS}" LDFLAGS="$BUILD_LDFLAGS" \
./configure --prefix="$BUILD_PREFIX" --libdir="$BUILD_PREFIX/lib$BUILD_LIBDIRSUFFIX" \
--sysconfdir="/etc/$PKG_NAME" --localstatedir="/var" --mandir="$BUILD_PREFIX/man" \
--infodir="$BUILD_PREFIX/info" --docdir="$BUILD_PREFIX/doc/$PKG_NAME-$PKG_VERSION" \
--build="$PKG_ARCH-slackware-linux" --enable-shared --disable-static \
FIXME &&
make "$BUILD_MAKEFLAGS" &&
make "$BUILD_MAKEFLAGS" DESTDIR="$BUILD_ROOT" install || exit 1
mkdir -p -m 755 "$BUILD_ROOT/$BUILD_PREFIX/doc/$PKG_NAME-$PKG_VERSION" &&
cp FIXME \
"$BUILD_ROOT/$BUILD_PREFIX/doc/$PKG_NAME-$PKG_VERSION" || exit 1
# mkdir -p -m 755 "$BUILD_ROOT/etc/rc.d" &&
# cat "$SRC_DIR/rc.FIXME" | sed -e "s:%BUILD_PREFIX%:$BUILD_PREFIX:g" >"$BUILD_ROOT/etc/rc.d/rc.FIXME" &&
# chmod 755 "$BUILD_ROOT/etc/rc.d/rc.FIXME" || exit 1
# mkdir -p -m 755 "$BUILD_ROOT/etc/profile.d" &&
# for FILE in "$SRC_DIR/FIXME.{csh,sh}"; do
# cat "$FILE" | sed -e "s:%BUILD_PREFIX%:$BUILD_PREFIX:g" | sed -e "s:%BUILD_LIBDIRSUFFIX%:$BUILD_LIBDIRSUFFIX:g" \
# >"$BUILD_ROOT/etc/profile.d/${FILE##*/}" &&
# chmod 755 "$BUILD_ROOT/etc/profile.d/${FILE##*/}" || exit 1
# done
# mkdir -p -m 755 "$BUILD_ROOT/etc/logrotate.d" &&
# cat "$SRC_DIR/FIXME.logrotate" >"$BUILD_ROOT/etc/logrotate.d/FIXME" || exit 1
###############################################################################
# Nothing below this notice should be changed or removed without good reason! #
###############################################################################
find "$BUILD_ROOT" | xargs -r file | egrep "ELF.*(executable|shared object)" | cut -d: -f1 | \
xargs -r strip --strip-unneeded || exit 1
for DIR in "$BUILD_ROOT/$BUILD_PREFIX/share/man" "$BUILD_ROOT/usr/share/man" \
"$BUILD_ROOT/$BUILD_PREFIX/share/info" "$BUILD_ROOT/usr/share/info"
do
if [[ -e "$DIR" ]]; then
mkdir -p -m 755 "$BUILD_ROOT/$BUILD_PREFIX/${DIR##*/}" &&
cp -aR "$DIR/*" "$BUILD_ROOT/$BUILD_PREFIX/${DIR##*/}" &&
rm -rf "$DIR" || exit 1
fi
done
if [[ -e "$BUILD_ROOT/$BUILD_PREFIX/man" ]]; then
find "$BUILD_ROOT/$BUILD_PREFIX/man" -regextype posix-extended -type f -regex \
"^$BUILD_ROOT/$BUILD_PREFIX/man/([^/]*/)?(man.*)/(.*)\.([[:digit:]n]){1}([^.])*$" | \
xargs -r gzip -9 &&
find "$BUILD_ROOT/$BUILD_PREFIX/man" -type l -printf ' \
if [ -e "%h/%l.gz" ]; then (cd "%h" && ln -sf "%l.gz" "%f.gz" && rm -f "%f") || exit 1; \
elif [ ! -e "%h/%l" ]; then echo 'Dangling symlink: %p'; exit 1; fi\n' | bash || exit 1
fi
if [ -e "$BUILD_ROOT/$BUILD_PREFIX/info" ]; then
find "$BUILD_ROOT/$BUILD_PREFIX/info" -regextype posix-extended -type f -regex \
"^$BUILD_ROOT/$BUILD_PREFIX/info/(.*)(\.info){1}(-[[:digit:]]+)?$" | \
xargs -r gzip -9 &&
rm -f "$BUILD_ROOT/$BUILD_PREFIX/info/dir" &&
find "$BUILD_ROOT/$BUILD_PREFIX/info" -type l -printf ' \
if [ -e "%h/%l.gz" ]; then (cd "%h" && ln -sf "%l.gz" "%f.gz" && rm -f "%f") || exit 1; \
elif [ ! -e "%h/%l" ]; then echo 'Dangling symlink: %p'; exit 1; fi\n' | bash || exit 1
fi
if ls "$BUILD_ROOT/$BUILD_PREFIX/lib$BUILD_LIBDIRSUFFIX/perl*" >/dev/null 2>&1; then
find "$BUILD_ROOT/$BUILD_PREFIX/lib$BUILD_LIBDIRSUFFIX/perl*" -name .packlist | \
xargs -r -I{} sed -ri {} -e "s:^$BUILD_ROOT::g" \
-e "s:^($BUILD_PREFIX|usr){1}/share:$BUILD_PREFIX:g" \
-e "s:^$BUILD_PREFIX/man/([^/]*/)?(man.*)/(.*)\.([[:digit:]n]){1}([^.])*$:$BUILD_PREFIX/man/\1\2/\3\.\4\5\.gz:g" \
-e "s:^$BUILD_PREFIX/info/dir::g" \
-e "s:^$BUILD_PREFIX/info/(.*)(\.info){1}(-[[:digit:]]+)?$:$BUILD_PREFIX/info/\1\2\3.gz:g" &&
find "$BUILD_ROOT/$BUILD_PREFIX/lib$BUILD_LIBDIRSUFFIX/perl*" -name perllocal.pod | \
xargs -r -I{} mv {} {}.new || exit 1
fi
if [[ "$BUILD_PREFIX" =~ ^/opt/($PKG_NAME|$SRCFILE_NAME|$SRCDIR_NAME).* ]]; then
# /opt/<package> is a special case. Because the FHS requires everything to be
# contained in their own directory, make symlinks into the standard /opt dirs.
( cd "$BUILD_ROOT/opt" &&
for DIR in bin include info lib lib64 man sbin share; do
if [ -e "${BUILD_PREFIX##*/}/$DIR" ]; then
mkdir -m 755 "$DIR" &&
(cd "$DIR" && lndir -silent "../${BUILD_PREFIX##*/}/$DIR)" || exit 1
fi
done
) || exit 1
fi
mkdir -m 755 "$BUILD_ROOT/install" &&
for FILE in doinst.sh slack-{conflicts,desc,install,remove,required,suggests}; do
if [[ -e "$SRC_DIR/$FILE" ]]; then
egrep -v '^#|^$' "$SRC_DIR/$FILE" | sed \
-e "s:%BUILD_PREFIX%:$BUILD_PREFIX:g" \
-e "s:%BUILD_LIBDIRSUFFIX%:$BUILD_LIBDIRSUFFIX:g" \
-e "s:%BUILD_OS_ID%:$BUILD_OS_ID:g" \
-e "s:%BUILD_OS_VERSION%_ID:$BUILD_OS_VERSION_ID:g" \
-e "s:%PKG_NAME%:$PKG_NAME:g" \
-e "s:%PKG_VERSION%:$PKG_VERSION:g" \
-e "s:%PKG_FILE_VERSION%:${PKG_VERSION//-/_}:g" \
-e "s:%PKG_ARCH%:$PKG_ARCH:g" \
-e "s:%PKG_BUILD%:$PKG_BUILD:g" \
-e "s:%PKG_TAG%:${PKG_TAG//-/_}:g" \
-e "s:%PKG_EXT%:$PKG_EXT:g" \
>"$BUILD_ROOT/install/$FILE" || exit 1
fi
done
cd "$BUILD_ROOT" &&
rm -f "$BUILD_WORKDIR/$PKG_NAME-${PKG_VERSION//-/_}-$PKG_ARCH-$PKG_BUILD${PKG_TAG//-/_}.*" &&
makepkg -l y -p -c n "$BUILD_WORKDIR/$PKG_NAME-${PKG_VERSION//-/_}-$PKG_ARCH-$PKG_BUILD${PKG_TAG//-/_}.$PKG_EXT" &&
cat install/slack-desc | egrep -v '^#|^$|^ ' | egrep "[[:alnum:]]+:" \
>"$BUILD_WORKDIR/$PKG_NAME-${PKG_VERSION//-/_}-$PKG_ARCH-$PKG_BUILD${PKG_TAG//-/_}.txt" || exit 1
mkdir -p -m 755 "$PKG_STORE" &&
mv -b "$BUILD_WORKDIR/$PKG_NAME-${PKG_VERSION//-/_}-$PKG_ARCH-$PKG_BUILD${PKG_TAG//-/_}.{$PKG_EXT,txt}" \
"$PKG_STORE" || exit 1
if [ "$BUILD_NOCLEANUP" != "1" ]; then
rm -rf "$BUILD_ROOT" "$BUILD_WORKDIR/$SRCDIR_NAME$SRCDIR_DELIM$SRCDIR_VERSION"
fi
echo
echo -e "\\033[1;32mPackage built:\n\
$(ls "$PKG_STORE/$PKG_NAME-${PKG_VERSION//-/_}-$PKG_ARCH-$PKG_BUILD${PKG_TAG//-/_}}.$PKG_EXT")\\033[0;39m"