#!/bin/bash # Version: 0.5.7 # Copyright (c) 2005-2017: # Darren 'Tadgy' Austin # 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' <&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' < 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"