repo/source/cpan-modules/old/cpan-modules.SlackBuild

273 lines
11 KiB
Bash
Executable file

#!/bin/bash
# Version: 0.5.7
# Copyright (c) 2005-2017:
# Darren 'Tadgy' Austin <darren (at) afterdark.org.uk>
# Licensed under the terms of the GNU General Public License version 3.
#
# Built package details.
PKG_NAME="cpan-modules"
PKG_VERSION="0.9.1"
PKG_BUILD="1"
PKG_TAG="_tadgy"
PKG_EXT="txz"
# Packages which must be installed to build.
BUILD_REQUIRED="perl openssl db48"
# Packages which must not be installed to build.
BUILD_CONFLICTS="$PKG_NAME"
#........1.........2.........3.........4.........5.........6.........7.........8.........9.........0.........1.........2.........3.....:...4
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
elif [[ "$1" =~ ^-(-)?(v|version)$ ]]; then
echo "NAME=\"$PKG_NAME\""
echo "VERSION=\"$PKG_VERSION\""
echo "BUILD=\"$PKG_BUILD$PKG_TAG\""
exit 0
else
echo "Usage: ${0##*/} [[-f|--force]|[-n|--no-cleanup]|[-v|--version]]"; exit 1
fi
shift
done
if (( "${BUILD_FORCE:-0}" != 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 -e "\\033[1;31m${0##*/}: Conflicting package '$PKG' installed.\\033[0;39m"; exit 1
fi
done
for PKG in $BUILD_REQUIRED; do
if ! check_installed "$PKG"; then
echo -e "\\033[1;31m${0##*/}: Required package '$PKG' not installed.\\033[0;39m"; exit 1
fi
done
fi
declare BUILD_OS_$(grep "^ID=" /etc/os-release)
declare BUILD_OS_$(grep "^VERSION_ID=" /etc/os-release)
BUILD_WORKDIR="/tmp/pkg-build"
BUILD_ROOT="$BUILD_WORKDIR/$PKG_NAME"
BUILD_PREFIX="/opt"
BUILD_MAKEFLAGS="-j5"
case "${BUILD_ARCH:=$(uname -m)}" in
i[45]86)
BUILD_CFLAGS="-march=$BUILD_ARCH -mtune=i686 -O2"
PKG_ARCH="$BUILD_ARCH"
;;
i686)
BUILD_CFLAGS="-march=$BUILD_ARCH -mtune=pentium4 -O2"
PKG_ARCH="$BUILD_ARCH"
;;
x86_64|x86-64)
BUILD_CFLAGS="-march=x86-64 -mtune=core2 -O2 -fPIC"
BUILD_LIBDIRSUFFIX="64"
PKG_ARCH="x86_64"
;;
*)
echo -e "\\033[1;31m${0##*/}: $(uname -m): unsupported architecture.\\033[0;39m"; exit 1
;;
esac
PKG_STORE="/tmp/pkg-store/$BUILD_OS_ID$BUILD_LIBDIRSUFFIX-$BUILD_OS_VERSION_ID"
[[ -e /data/slackware/repo/source/build.options ]] && {
. /data/slackware/repo/source/build.options || exit 1
}
SRC_DIR="$(pwd)"
umask 0022 &&
rm -rf "$BUILD_ROOT" &&
mkdir -p -m 750 "$BUILD_WORKDIR" &&
mkdir -m 755 "$BUILD_ROOT" || exit 1
shopt -s extglob
# Force a prefix of /usr - otherwise scripts which are launched from within daemons
# don't get PERL5LIB set and can't find modules.
BUILD_PREFIX="/usr"
# Use vendor_perl as site_perl doesn't seem to be in the default @INC in Slackware.
BUILD_PERLLOC="vendor"
export PERL5LIB="$BUILD_ROOT/$BUILD_PREFIX/lib$BUILD_LIBDIRSUFFIX/perl5/${BUILD_PERLLOC}_perl"
# Special case: Socket6.
# This build fails when CCFLAGS is set to any value.
echo -e "\n\n\\033[1;32m***\n\\033[1;32m* Installing: Socket6 \n\\033[1;32m***\\033[0;39m" &&
PERL_MM_OPT="DESTDIR=\"$BUILD_ROOT\" INSTALLDIRS=\"$BUILD_PERLLOC\" \
INSTALL${BUILD_PERLLOC^^}ARCH=\"$BUILD_PREFIX/lib$BUILD_LIBDIRSUFFIX/perl5/${BUILD_PERLLOC}_perl\" \
INSTALL${BUILD_PERLLOC^^}BIN=\"$BUILD_PREFIX/bin\" \
INSTALL${BUILD_PERLLOC^^}LIB=\"$BUILD_PREFIX/lib$BUILD_LIBDIRSUFFIX/perl5/${BUILD_PERLLOC}_perl\" \
INSTALL${BUILD_PERLLOC^^}MAN1DIR=\"$BUILD_PREFIX/man/man1\" \
INSTALL${BUILD_PERLLOC^^}MAN3DIR=\"$BUILD_PREFIX/man/man3\" \
INSTALL${BUILD_PERLLOC^^}SCRIPT=\"$BUILD_PREFIX/bin\"" \
perl -MCPAN -e 'shell' <<EOF || exit 1
o conf build_requires_install_policy yes
o conf prerequisites_policy follow
o conf recommends_policy 1
o conf suggests_policy 0
o conf make_arg "$BUILD_MAKEFLAGS"
force install "Socket6"
EOF
# Set up for the MakeMaker way of doing things.
# See: http://perldoc.perl.org/ExtUtils/MakeMaker.html
export PERL_MM_OPT="CCFLAGS=\"$BUILD_CFLAGS\" OPTIMIZE=\"\" \
DESTDIR=\"$BUILD_ROOT\" \
INSTALLDIRS=\"$BUILD_PERLLOC\" \
INSTALL${BUILD_PERLLOC^^}ARCH=\"$BUILD_PREFIX/lib$BUILD_LIBDIRSUFFIX/perl5/${BUILD_PERLLOC}_perl\" \
INSTALL${BUILD_PERLLOC^^}BIN=\"$BUILD_PREFIX/bin\" \
INSTALL${BUILD_PERLLOC^^}LIB=\"$BUILD_PREFIX/lib$BUILD_LIBDIRSUFFIX/perl5/${BUILD_PERLLOC}_perl\" \
INSTALL${BUILD_PERLLOC^^}MAN1DIR=\"$BUILD_PREFIX/man/man1\" \
INSTALL${BUILD_PERLLOC^^}MAN3DIR=\"$BUILD_PREFIX/man/man3\" \
INSTALL${BUILD_PERLLOC^^}SCRIPT=\"$BUILD_PREFIX/bin\""
# Set up for the Module::Build way of doing things.
# See: http://perldoc.perl.org/Module/Build.html
# Note: sbin below is non-standard and used only by Mail:SPF at the moment.
export PERL_MB_OPT="--config ccflags=\"$BUILD_CFLAGS\" \
--destdir \"$BUILD_ROOT\" \
--installdirs \"$BUILD_PERLLOC\" \
--install_path arch=\"$BUILD_PREFIX/lib$BUILD_LIBDIRSUFFIX/perl5/${BUILD_PERLLOC}_perl\" \
--install_path bin=\"$BUILD_PREFIX/bin\" \
--install_path bindoc=\"$BUILD_PREFIX/man/man1\" \
--install_path lib=\"$BUILD_PREFIX/lib$BUILD_LIBDIRSUFFIX/perl5/${BUILD_PERLLOC}_perl\" \
--install_path libdoc=\"$BUILD_PREFIX/man/man3\" \
--install_path sbin=\"$BUILD_PREFIX/sbin\" \
--install_path script=\"$BUILD_PREFIX/bin\""
# Do the module installs.
IFS=$'\n'
for MOD in $(cat $SRC_DIR/modules.list | egrep -v '^[[:blank:]]*(#.*)*$'); do
MOD="${MOD%%*([[:space:]])#*}"
if [[ -z "$(perl -M$MOD -e0 2>&1)" ]]; then
echo -e "\n\n\\033[1;33m***\n\\033[1;33m* Skipping: $MOD - already installed\n\\033[1;33m***\\033[0;39m"
else
echo -e "\n\n\\033[1;32m***\n\\033[1;32m* Installing: Spcket6 \n\\033[1;32m***\\033[0;39m" &&
perl -MCPAN -e 'shell' <<EOF || exit 1
o conf build_requires_install_policy yes
o conf prerequisites_policy follow
o conf recommends_policy 1
o conf suggests_policy 0
o conf make_arg "$BUILD_MAKEFLAGS"
force install "$MOD"
EOF
fi
done
###############################################################################
# Nothing below this notice should be changed or removed without good reason! #
###############################################################################
HARDLINKS="$(find $BUILD_ROOT -type f -links +1)"
if [[ ! -z "$HARDLINKS" ]]; then
echo -e "\\033[1;31mFound hardlinked files:\\033[0;39m"
echo -e "\\033[1;31m$HARDLINKS\\033[0;39m"
exit 1
fi
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
else
echo -e "\\033[1;31mDangling symlink: %p\\033[0;39m"; exit 1
fi\n' | bash -x || 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
else
echo -e "\\033[1;31mDangling symlink: %p\\033[0;39m"; exit 1
fi\n' | bash -x || exit 1
fi
if [[ -e "$BUILD_ROOT/$BUILD_PREFIX/lib$BUILD_LIBDIRSUFFIX/perl5" ]]; then
find "$BUILD_ROOT/$BUILD_PREFIX/lib$BUILD_LIBDIRSUFFIX/perl5" -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" -name perllocal.pod | xargs -r rm || exit 1
# Note: These will fail if $BUILD_ROOT == /usr, but are required to clean up left over directories from perllocal.pod removal.
rmdir $BUILD_ROOT/usr/lib$BUILD_LIBDIRSUFFIX/perl5 # OK to fail
rmdir $BUILD_ROOT/usr/lib$BUILD_LIBDIRSUFFIX # OK to fail
rmdir $BUILD_ROOT/usr # OK to fail
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 '^#|^$|-handy-ruler-' "$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 >"$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"
fi
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"