diff --git a/source/cpan-modules/ModulesConfig.pm b/source/cpan-modules/ModulesConfig.pm new file mode 100644 index 0000000..266f2dd --- /dev/null +++ b/source/cpan-modules/ModulesConfig.pm @@ -0,0 +1,71 @@ +$CPAN::Config = { + 'allow_installing_module_downgrades' => q[no], + 'allow_installing_outdated_dists' => q[yes], + 'applypatch' => q[], + 'auto_commit' => q[0], + 'build_cache' => q[250], + 'build_dir' => q[%WORKINGDIR%/build], + 'build_dir_reuse' => q[0], + 'build_requires_install_policy' => q[yes], + 'bzip2' => q[/usr/bin/bzip2], + 'cache_metadata' => q[1], + 'check_sigs' => q[0], + 'cleanup_after_install' => q[1], + 'colorize_output' => q[0], + 'commandnumber_in_prompt' => q[1], + 'connect_to_internet_ok' => q[1], + 'cpan_home' => q[%WORKINGDIR%], + 'ftp_passive' => q[1], + 'ftp_proxy' => q[], + 'getcwd' => q[cwd], + 'gpg' => q[/usr/bin/gpg], + 'gzip' => q[/usr/bin/gzip], + 'halt_on_failure' => q[1], + 'histfile' => q[], + 'http_proxy' => q[], + 'inactivity_timeout' => q[0], + 'index_expire' => q[1], + 'inhibit_startup_message' => q[0], + 'keep_source_where' => q[%WORKINGDIR%/sources], + 'load_module_verbosity' => q[v], + 'make' => q[/usr/bin/make], + 'make_arg' => q[-j %NUMJOBS% %MAKEFLAGS%], + 'make_install_arg' => q[-j %NUMJOBS% %MAKEFLAGS%], + 'make_install_make_command' => q[/usr/bin/make], + 'makepl_arg' => q[%CC% %CXX%], + 'mbuild_arg' => q[], + 'mbuild_install_arg' => q[], + 'mbuild_install_build_command' => q[./Build], + 'mbuildpl_arg' => q[], + 'no_proxy' => q[], + 'pager' => q[/usr/bin/less], + 'patch' => q[/usr/bin/patch], + 'perl5lib_verbosity' => q[v], + 'prefer_external_tar' => q[1], + 'prefer_installer' => q[MB], + 'prefs_dir' => q[%WORKINGDIR%/prefs], + 'prerequisites_policy' => q[follow], + 'recommends_policy' => q[1], + 'scan_cache' => q[never], + 'shell' => q[/bin/bash], + 'show_unparsable_versions' => q[1], + 'show_upload_date' => q[1], + 'show_zero_versions' => q[1], + 'suggests_policy' => q[0], + 'tar' => q[/usr/bin/tar], + 'tar_verbosity' => q[none], + 'term_is_latin' => q[0], + 'term_ornaments' => q[1], + 'test_report' => q[0], + 'trust_test_report_history' => q[0], + 'unzip' => q[/usr/bin/unzip], + 'urllist' => [q[http://www.cpan.org/]], + 'use_prompt_default' => q[0], + 'use_sqlite' => q[0], + 'version_timeout' => q[15], + 'wget' => q[/usr/bin/wget], + 'yaml_load_code' => q[0], + 'yaml_module' => q[YAML], +}; +1; +__END__ diff --git a/source/cpan-modules/REVERSE-DEPENDS b/source/cpan-modules/REVERSE-DEPENDS new file mode 100644 index 0000000..50f9ef2 --- /dev/null +++ b/source/cpan-modules/REVERSE-DEPENDS @@ -0,0 +1,2 @@ +spamassassin (custom) +mj2 (custom) diff --git a/source/cpan-modules/cpan-modules.SlackBuild b/source/cpan-modules/cpan-modules.SlackBuild new file mode 100755 index 0000000..385a714 --- /dev/null +++ b/source/cpan-modules/cpan-modules.SlackBuild @@ -0,0 +1,344 @@ +#!/bin/bash +# Version: 0.6.3 +# Copyright (c) 2005-2022: +# Darren 'Tadgy' Austin +# Licensed under the terms of the GNU General Public License version 3. + +######################################################################## +# None of this section requires editing. # +# Scroll down to the "Begin section that will require editing" marker. # +######################################################################## + +# Silence shellcheck. +# shellcheck disable=SC2015,SC2174 + +# Functions. +check_installed() { + # $1 = The package name to check is installed. + + [[ -z "$1" ]] && return 1 + printf "%s\\n" /var/lib/pkgtools/packages/* | grep -P "^/var/lib/pkgtools/packages/\Q$1\E-([^-]*)-([^-]*)-([^-]*)$" >/dev/null 2>&1 + return $? +} + +die() { + # $1 = The message to write to stderr on exit. + + printf "\\033[1;31;40m%s: %s\\033[0;39m\\n" "${0##*/}" "${1:-Abort}" >&2 + exit 1 +} + +# Make sure to be in the build directory. +# shellcheck disable=SC2164 +cd "$(cd "${BASH_SOURCE[0]%/*}"; pwd -P)" + +# Read global buildconf settings. +# shellcheck disable=SC1091 +[[ -e ../buildconf ]] && { + . ../buildconf 2>/dev/null || die "Error sourcing global buildconf" +} + +# Package specific buildconf settings. +# shellcheck disable=SC2015,SC1090 +[[ -e "./$(basename "${BASH_SOURCE[0]}" .SlackBuild).buildconf" ]] && . "./$(basename "${BASH_SOURCE[0]}" .SlackBuild).buildconf" 2>/dev/null || \ + die "Error sourcing package buildconf" + +# Package storage path. +# Be safe and leave it in /tmp by default (can be overridden). +# shellcheck disable=SC2016 +[[ -z "$PKG_STORE" ]] && PKG_STORE='/tmp/pkg-store/$DIST_OS_ID-$DIST_OS_VERSION_ID' + +# Parse command line options. +while (( $# > 0 )); do + if [[ "$1" =~ ^-(-)?f(orce)?$ ]]; then + BUILD_FORCE=1 + elif [[ "$1" =~ ^-(-)?n(o-cleanup)?$ ]]; then + BUILD_CLEANUP=0 + elif [[ "$1" =~ ^-(-)?v(ersion)?$ ]]; then + printf "%s=\"%s\"\\n" "NAME" "$PKG_NAME" + printf "%s=\"%s\"\\n" "VERSION" "$PKG_VERSION" + printf "%s=\"%s\"\\n" "BUILD" "$PKG_BUILD$PKG_TAG" + exit 0 + else + printf "%s: %s: %s\\n" "${0##*/}" "Invalid option" "$1" >&2 + printf "%s: %s %s\\n" "Usage" "${0##*/}" "[[-f|--force]|[-n|--no-cleanup]|[-v|--version]]" >&2 + exit 1 + fi + shift +done + +# Pre-build checks. +(( ${BUILD_FORCE:-0} != 1 )) && { + while read -r PKG; do + check_installed "$PKG" && die "Conflicting package installed: $PKG" + done < <(printf "%s\\n" "${BUILD_CONFLICTS[@]}") + while read -r PKG; do + check_installed "$PKG" || die "Required package not installed: $PKG" + done < <(printf "%s\\n" "${BUILD_REQUIRES[@]}") +} + +# Gather some system information. +# shellcheck disable=SC2046 +declare DIST_OS_$(grep "^ID=" /etc/os-release) +# shellcheck disable=SC2046 +declare DIST_OS_$(grep "^VERSION_ID=" /etc/os-release) +# Try to detect a 'current' build environment. +# shellcheck disable=SC2046 +declare DIST_OS_$(grep "^VERSION_CODENAME=" /etc/os-release) +[[ "$DIST_OS_VERSION_CODENAME" == "current" ]] && DIST_OS_VERSION_ID="current" +unset DIST_OS_VERSION_CODENAME + +# Build environment. +BUILD_WORKDIR="${BUILD_WORKDIR:-/tmp/pkg-build}" +BUILD_ROOT="$BUILD_WORKDIR/pkg-$PKG_NAME" +BUILD_PREFIX="${BUILD_PREFIX:-/opt}" +BUILD_ALTCC="${BUILD_ALTCC:-}" +BUILD_ALTCXX="${BUILD_ALTCXX:-}" +BUILD_NUMJOBS="${BUILD_NUMJOBS:-7}" +case "${BUILD_ARCH:=$(uname -m)}" in + i[45]86) + BUILD_CFLAGS="${BUILD_CFLAGS:--march="$BUILD_ARCH" -mtune=i586 -O2}" + BUILD_CXXFLAGS="${BUILD_CXXFLAGS:-$BUILD_CFLAGS}" + BUILD_LDFLAGS="${BUILD_LDFLAGS:-}" + BUILD_MAKEFLAGS=( "${BUILD_MAKEFLAGS[@]}" ) + PKG_ARCH="${PKG_ARCH:-$BUILD_ARCH}" + ;; + i686) + BUILD_CFLAGS="${BUILD_CFLAGS:--march="$BUILD_ARCH" -mtune=pentium4 -O2}" + BUILD_CXXFLAGS="${BUILD_CXXFLAGS:-$BUILD_CFLAGS}" + BUILD_LDFLAGS="${BUILD_LDFLAGS:-}" + BUILD_MAKEFLAGS=( "${BUILD_MAKEFLAGS[@]}" ) + PKG_ARCH="${PKG_ARCH:-$BUILD_ARCH}" + ;; + x86_64|x86-64) + DIST_OS_ID="slackware64" + BUILD_CFLAGS="${BUILD_CFLAGS:--march=x86-64-v2 -mtune=ivybridge -O2 -fPIC -Doff64_t=off_t}" + BUILD_CXXFLAGS="${BUILD_CXXFLAGS:-$BUILD_CFLAGS}" + BUILD_LDFLAGS="${BUILD_LDFLAGS:-}" + BUILD_MAKEFLAGS=( "${BUILD_MAKEFLAGS[@]}" ) + BUILD_LIBDIRSUFFIX="64" + PKG_ARCH="${PKG_ARCH:-x86_64}" + ;; + aarch64) + DIST_OS_ID="slackwareaarch64" + BUILD_CFLAGS="${BUILD_CFLAGS:-O2 -fPIC}" + BUILD_CXXFLAGS="${BUILD_CXXFLAGS:-$BUILD_CFLAGS}" + BUILD_LDFLAGS="${BUILD_LDFLAGS:-}" + BUILD_MAKEFLAGS=( "${BUILD_MAKEFLAGS[@]}" ) + BUILD_LIBDIRSUFFIX="64" + PKG_ARCH="${PKG_ARCH:-aarch64}" + ;; + arm*) + DIST_OS_ID="slackwarearm" + BUILD_CFLAGS="${BUILD_CFLAGS:-O2}" + BUILD_CXXFLAGS="${BUILD_CXXFLAGS:-$BUILD_CFLAGS}" + BUILD_LDFLAGS="${BUILD_LDFLAGS:-}" + BUILD_MAKEFLAGS=( "${BUILD_MAKEFLAGS[@]}" ) + PKG_ARCH="${PKG_ARCH:-arm}" + ;; + *) + die "Unsupported build architecture: $BUILD_ARCH" + ;; +esac + + +# Now all possible changes to variables in PKG_STORE are complete, expand out the embedded variables. +eval "$(declare -p PKG_STORE | sed -re 's/\\\$/$/g')" + +# Sanity. +SRC_DIR="$(pwd)" +umask 0022 +[[ ! -e "$BUILD_WORKDIR" ]] && { mkdir -p -m 750 "$BUILD_WORKDIR" || die "Failed to create working directory"; } +rm -rf "$BUILD_ROOT" && mkdir -m 755 "$BUILD_ROOT" || die "Failed to clear build root" +[[ -n "${SRC_DIRNAMES[*]}" ]] && { rm -rf "${SRC_DIRNAMES[@]/#/$BUILD_WORKDIR/}" || die "Failed to clear source directories"; } + +# Get sources if they aren't downloaded already. +[[ -n "${SRC_DOWNLOADS[*]}" ]] && { + WGET="$(command -v wget)" + I=0 + while read -r SRC; do + [[ ! -e "${SRC_FILENAMES[$I]}" ]] && { + [[ -z "$WGET" ]] && die "wget is required to download sources" + "$WGET" -t 3 -c -T 30 -w 5 --retry-connrefused --retry-on-host-error --no-check-certificate --passive-ftp -O "${SRC_FILENAMES[$I]}" "$SRC" || \ + { rm "${SRC_FILENAMES[$I]}"; die "Failed to download source file: $SRC"; } + } + [[ "$(md5sum "${SRC_FILENAMES[$I]}" | cut -d' ' -f1)" != "${SRC_MD5SUMS[$I]}" ]] && die "md5sum verification failed: ${SRC_FILENAMES[$I]}" + (( I++ )) + done < <(printf "%s\\n" "${SRC_DOWNLOADS[@]}") +} + +# Unpack sources. +[[ -n "${SRC_FILENAMES[*]}" ]] && { + while read -r SRC; do + case "$SRC" in + *.tar.?z|*.t?z) + tar -xv -C "$BUILD_WORKDIR" -f "$SRC" || die "Failed to extract source: $SRC" + ;; + *.zip|*.ZIP) + unzip -d "$BUILD_WORKDIR" "$SRC" || die "Failed to extract source: $SRC" + ;; + *) + die "Un-handled source archive format: ${SRC##*.}" + ;; + esac + done < <(printf "%s\\n" "${SRC_FILENAMES[@]}") +} + +# Fix any weird permissions on sources. +[[ -n "${SRC_DIRNAMES[*]}" ]] && { chown -R root:root "${SRC_DIRNAMES[@]/#/$BUILD_WORKDIR/}" && chmod -R go-w "${SRC_DIRNAMES[@]/#/$BUILD_WORKDIR/}" || \ + die "Failed to correct source directory permissions"; } + +# Standard ./configure options. +CONFIGURE_OPTS=("${BUILD_ALTCC:+CC=\"$BUILD_ALTCC\"}" "${BUILD_ALTCXX:+CXX=\"$BUILD_ALTCXX\"}" "--prefix=\"$BUILD_PREFIX\"" + "--libdir=\"$BUILD_PREFIX/lib$BUILD_LIBDIRSUFFIX\"" "--sysconfdir=\"/etc/$PKG_NAME\"" "--localstatedir=/var" "--mandir=\"$BUILD_PREFIX/man\"" + "--infodir=\"$BUILD_PREFIX/info\"" "--build=\"$PKG_ARCH-slackware-linux\"" "--enable-shared" "--disable-static") + +# Use vendor_perl as site_perl doesn't seem to be in the default @INC in Slackware. +LOCATION="vendor" + +# Make perl look in $BUILD_ROOT for modules. +export PERL5LIB="$BUILD_ROOT/$BUILD_PREFIX/lib$BUILD_LIBDIRSUFFIX/perl5/${LOCATION}_perl" + +# 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=\"$LOCATION\" \ + INSTALL${LOCATION^^}ARCH=\"$BUILD_PREFIX/lib$BUILD_LIBDIRSUFFIX/perl5/${LOCATION}_perl\" INSTALL${LOCATION^^}BIN=\"$BUILD_PREFIX/bin\" \ + INSTALL${LOCATION^^}LIB=\"$BUILD_PREFIX/lib$BUILD_LIBDIRSUFFIX/perl5/${LOCATION}_perl\" INSTALL${LOCATION^^}MAN1DIR=\"$BUILD_PREFIX/man/man1\" \ + INSTALL${LOCATION^^}MAN3DIR=\"$BUILD_PREFIX/man/man3\" INSTALL${LOCATION^^}SBIN=\"$BUILD_PREFIX/sbin\" INSTALL${LOCATION^^}SCRIPT=\"$BUILD_PREFIX/bin\"" + +# Set up for the Module::Build way of doing things. +# See: http://perldoc.perl.org/Module/Build.html +export PERL_MB_OPT="--config ccflags=\"$BUILD_CFLAGS\" --destdir \"$BUILD_ROOT\" --installdirs \"$LOCATION\" \ + --install_path arch=\"$BUILD_PREFIX/lib$BUILD_LIBDIRSUFFIX/perl5/${LOCATION}_perl\" --install_path bin=\"$BUILD_PREFIX/bin\" \ + --install_path bindoc=\"$BUILD_PREFIX/man/man1\" --install_path lib=\"$BUILD_PREFIX/lib$BUILD_LIBDIRSUFFIX/perl5/${LOCATION}_perl\" \ + --install_path libdoc=\"$BUILD_PREFIX/man/man3\" --install_path sbin=\"$BUILD_PREFIX/sbin\" --install_path script=\"$BUILD_PREFIX/bin\"" + +# Create the working directory, and copy in the CPAN configuration. +[[ ! -e "$BUILD_WORKDIR/$PKG_NAME-$PKG_VERSION" ]] && { mkdir -p -m 755 "$BUILD_WORKDIR/$PKG_NAME-$PKG_VERSION" || die "Failed to create build directory"; } +sed -r -e "s:%CC%:${BUILD_ALTCC:+CC=\"$BUILD_ALTCC\"}:g" -e "s:%CXX%:${BUILD_ALTCXX:+CXX=\"$BUILD_ALTCXX\"}:g" \ + -e "s:%WORKINGDIR%:$BUILD_WORKDIR/$PKG_NAME-$PKG_VERSION:g" -e "s/%NUMJOBS%/$BUILD_NUMJOBS/g" -e "s/%MAKEFLAGS%/${BUILD_MAKEFLAGS[*]}/g" \ + <"$SRC_DIR/ModulesConfig.pm" >"$BUILD_WORKDIR/$PKG_NAME-$PKG_VERSION/ModulesConfig.pm" || die "Failed to copy ModulesConfig.pm into build directory" + +# Process each of the sources. +for ((I = 0; I < ${#BUILD_PERL_MODULES[@]}; I++)); do + # Be in the source directory. + cd "$BUILD_WORKDIR/${SRC_DIRNAMES[$I]}" || die "Failed to change to source directory: $BUILD_WORKDIR/${SRC_DIRNAMES[$I]}" + + ############################################ + # Begin section that will require editing. # + ############################################ + + # Build each module. + if perl -M"${BUILD_PERL_MODULES[$I]}" -e0 >/dev/null 2>&1; then + printf "\\n\\033[1;32;40m%s\\n" "********************************************************************************" + printf "* %s: %s\\n" "Already Installed" "${BUILD_PERL_MODULES[$I]}" + printf "%s\\033[0;39m\\n" "********************************************************************************" + else + printf "\\n\\033[1;33;40m%s\\n" "********************************************************************************" + printf "* %s: %s\\n" "Building and installing" "${BUILD_PERL_MODULES[$I]}" + printf "%s\\033[0;39m\\n" "********************************************************************************" + cpan -j "$BUILD_WORKDIR/$PKG_NAME-$PKG_VERSION/ModulesConfig.pm" -fi "${BUILD_PERL_MODULES[$I]}" || die "Module build failed: ${BUILD_PERL_MODULES[$I]}" + fi +done + +################################################## +# End of the only section that required editing. # +################################################## + +# Set up for sed replacements. +SED_OPTS=("-e" "s:%BUILD_PREFIX%:$BUILD_PREFIX:g" "-e" "s:%BUILD_LIBDIR%:$BUILD_PREFIX/lib$BUILD_LIBDIRSUFFIX:g" "-e" "s:%BUILD_ARCH%:$BUILD_ARCH:g" + "-e" "s:%DIST_OS_ID%:$DIST_OS_ID:g" "-e" "s:%DIST_OS_VERSION_ID%:$DIST_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") + +# Add extra configuration/scripts. +for DIR in cron.d cron.hourly cron.daily cron.weekly cron.monthly default logrotate.d profile.d rc.d; do + [[ -e "$SRC_DIR/$DIR" ]] && { + mkdir -p -m 755 "$BUILD_ROOT/etc/$DIR" || die "Failed to create directory: /etc/$DIR" + for FILE in "$SRC_DIR/$DIR"/*; do + sed -r "${SED_OPTS[@]}" <"$FILE" >"$BUILD_ROOT/etc/$DIR/${FILE##*/}" && chmod --reference="$FILE" "$BUILD_ROOT/etc/$DIR/${FILE##*/}" || \ + die "Failed to copy $DIR/${FILE##*/} into package" + done + } +done + +# Slackware packages don't ship with hardlinks (I don't know why...). +HARDLINKS="$(find "$BUILD_ROOT" -type f -links +1 | tr $'\n' ' ')" +[[ -n "$HARDLINKS" ]] && die "Found hardlinked files in package: $HARDLINKS" + +# Strip binaries. +find "$BUILD_ROOT" -type f -exec file {} + | grep -E "ELF.*(executable|shared object)" | cut -d: -f1 | xargs -r strip --strip-unneeded || \ + die "Failed to stip object files" + +# Move man and info pages if required. +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 + [[ -e "$DIR" ]] && { + mkdir -p -m 755 "$BUILD_ROOT/$BUILD_PREFIX/${DIR##*/}" || die "Failed to create $BUILD_PREFIX/${DIR##*/} directory" + mv "$DIR"/* "$BUILD_ROOT/$BUILD_PREFIX/${DIR##*/}" && rmdir "$DIR" || die "Failed to move $DIR to correct directory" + } +done + +# Handle man pages. +[[ -e "$BUILD_ROOT/$BUILD_PREFIX/man" ]] && { + find "$BUILD_ROOT/$BUILD_PREFIX/man" -regextype posix-extended -type f -regex "^$BUILD_ROOT/$BUILD_PREFIX/man/([^/]*/)?man.*/.*\.[[:digit:]n]{1}[^.]*$" \ + -exec gzip -9 {} + || die "Failed to compress man pages" + 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") || \ + die "Failed to fix symlink: %f"; else die "Dangling symlink: %p"; fi\n' | bash || die "Man pages' symlinks correction failed" +} + +# Compress and fix info pages. +[[ -e "$BUILD_ROOT/$BUILD_PREFIX/info" ]] && { + rm -f "$BUILD_ROOT/$BUILD_PREFIX/info/dir" + find "$BUILD_ROOT/$BUILD_PREFIX/info" -regextype posix-extended -type f -regex "^$BUILD_ROOT/$BUILD_PREFIX/info/.*(\.info){1}(-[[:digit:]]+)?$" \ + -exec gzip -9 {} + || die "Failed to compress info pages" + 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") || \ + die "Failed to fix symlink: %f"; else die "Dangling symlink: %p"; fi\n' | bash || die "Info pages' symlink correction failed" +} + +# Fix paths for perl modules. +[[ -e "$BUILD_ROOT/$BUILD_PREFIX/lib$BUILD_LIBDIRSUFFIX/perl5" ]] && { + find "$BUILD_ROOT/$BUILD_PREFIX/lib$BUILD_LIBDIRSUFFIX/perl5" -name .packlist -exec 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/(.*)(\.info){1}(-[[:digit:]]+)?$:$BUILD_PREFIX/info/\1\2\3.gz:g" {} + || die "Failed to modify incorrect perl paths" + find "$BUILD_ROOT" -name perllocal.pod -exec rm -f {} + # Should never fail + # Note: These will fail if $BUILD_ROOT == /usr, but are required to clean left over directories from perllocal.pod removal. + rmdir "$BUILD_ROOT/usr/lib$BUILD_LIBDIRSUFFIX/perl5" 2>/dev/null # OK to fail + rmdir "$BUILD_ROOT/usr/lib$BUILD_LIBDIRSUFFIX" 2>/dev/null # OK to fail + rmdir "$BUILD_ROOT/usr" 2>/dev/null # OK to fail +} + +# /opt/{,-} is a special case. +# Technically, the FHS requires everything in /opt to be contained in its own package directory, +# so - assuming this technicallity is in use - make symlinks into the standard /opt dirs. +[[ "$BUILD_PREFIX" =~ ^/opt/$PKG_NAME.* ]] && { + (cd "$BUILD_ROOT/opt" && + for DIR in bin doc include info lib lib64 libexec man sbin share; do + [[ -e "${BUILD_PREFIX##*/}/$DIR" ]] && { mkdir -m 755 "$DIR" && (cd "$DIR" && lndir -silent "../${BUILD_PREFIX##*/}/$DIR)") || exit 1; } + done) || die "Failed to link /opt paths" +} + +# Copy pkgtool special files into the package. +mkdir -m 755 "$BUILD_ROOT/install" || die "Failed to make /install directory" +for FILE in doinst.sh douninst.sh slack-{conflicts,desc,required,suggests}; do + [[ -e "$SRC_DIR/$FILE" ]] && { + sed -r -e '/(^#|^$|-handy-ruler-)/ d' "${SED_OPTS[@]}" <"$SRC_DIR/$FILE" >"$BUILD_ROOT/install/$FILE" || \ + die "Failed to copy in pkgtool special file: $FILE" + } +done + +# Build the package. +cd "$BUILD_ROOT" || die "Failed to cd to BUILD_ROOT to build package" +rm -f "$BUILD_WORKDIR/$PKG_NAME-${PKG_VERSION//-/_}-$PKG_ARCH-$PKG_BUILD${PKG_TAG//-/_}".* +makepkg -l y -p -c n --acls --xattrs "$BUILD_WORKDIR/$PKG_NAME-${PKG_VERSION//-/_}-$PKG_ARCH-$PKG_BUILD${PKG_TAG//-/_}.$PKG_EXT" || \ + die "Package creation failed" + +# Clean up after ourselves. +(( ${BUILD_CLEANUP:-1} == 1 )) && rm -rf "$BUILD_ROOT" "${SRC_DIRNAMES[@]/#/$BUILD_WORKDIR/}" + +# Move package to the store. +mkdir -p -m 755 "$PKG_STORE" && mv --backup=numbered "$BUILD_WORKDIR/$PKG_NAME-${PKG_VERSION//-/_}-$PKG_ARCH-$PKG_BUILD${PKG_TAG//-/_}.$PKG_EXT" \ + "$PKG_STORE" || die "Failed to move package to store - package left in $BUILD_WORKDIR" + +printf "\\033[1;32;40m%s:\\n %s\\033[0;39m\\n" "Package built and moved to store" \ + "$PKG_STORE/$PKG_NAME-${PKG_VERSION//-/_}-$PKG_ARCH-$PKG_BUILD${PKG_TAG//-/_}.$PKG_EXT" diff --git a/source/cpan-modules/cpan-modules.buildconf b/source/cpan-modules/cpan-modules.buildconf new file mode 100644 index 0000000..87a3aa9 --- /dev/null +++ b/source/cpan-modules/cpan-modules.buildconf @@ -0,0 +1,93 @@ +# Package details. +PKG_NAME="$(basename "${BASH_SOURCE[0]}" .buildconf)" +PKG_VERSION="15.0_1" +PKG_BUILD="1" +PKG_TAG="${PKG_TAG:-_tadgy}" +PKG_EXT="${PKG_EXT:-txz}" + +# Sources - the details in these arrays must all match per indicies. +SRC_DOWNLOADS=() +SRC_MD5SUMS=() +SRC_FILENAMES=() +SRC_DIRNAMES=() + +# Build configuration. +BUILD_REQUIRES=("perl" "openssl" "db48") +BUILD_CONFLICTS=("$PKG_NAME") + +# The perl modules to build. +BUILD_PERL_MODULES=( + ###################### + # SpamAssassin # + # Updated for v3.4.6 # + ###################### + # Required # + Socket6 + Digest::SHA1 + HTML::Parser + Net::DNS + NetAddr::IP + Time::HiRes + LWP + HTTP::Date + IO::Zlib + Text::Diff # Optional add-on for Archive::Tar + Archive::Tar + # Optional # + MIME::Base64 + DB_File + Net::SMTP + Mail::SPF + # Geo::IP # Functionallity not required. + # Net::Ident # Functionallity not required. + IO::Socket::INET6 # Requires Socket6, installed specially in SlackBuild. + IO::Socket::SSL + Compress::Zlib + Mail::DKIM + DBI + Encode::Detect + # Apache::Test # Functionallity not required. + Net::CIDR::Lite # Not listed in docs, but shows as missing during build. + # Net::Patricia # Not listed in docs, but shows as missing during build. Functionallity not required. + BSD::Resource # Not listed in docs, but shows as missing during build. + + + ######################## + # Majordomo2 # + # Updated for 20160404 # + ######################## + # Required # + Mail::Internet + Mail::Header + MIME::Base64 + IO::Wrap + MIME::Tools + Data::Dumper + Date::Manip + CGI + Digest::SHA1 + Socket + IO::File + IO::Handle + Date::Format + Date::Parse + DirHandle + Safe + POSIX + Net::Domain + File::Basename + File::Copy + Fcntl + Carp + Time::Local + HTML::FormatText + HTML::TreeBuilder + # Optional # + Time::HiRes + Term::ReadLine::Gnu # Or Term::ReadLine::Perl, but mod reqired user input to build + Text::Reflow + # DB_File # Functionallity not required. + # DBI # Functionallity not required. + # DBD::Pg # Functionallity not required. + # DBD::mysql # Functionallity not required. +) diff --git a/source/cpan-modules/old/cpan-modules.SlackBuild b/source/cpan-modules/old/cpan-modules.SlackBuild new file mode 100755 index 0000000..d9db1c1 --- /dev/null +++ b/source/cpan-modules/old/cpan-modules.SlackBuild @@ -0,0 +1,273 @@ +#!/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" diff --git a/source/cpan-modules/old/modules.list b/source/cpan-modules/old/modules.list new file mode 100644 index 0000000..7eba517 --- /dev/null +++ b/source/cpan-modules/old/modules.list @@ -0,0 +1,72 @@ +###################### +# SpamAssassin # +# Updated for v3.4.6 # +###################### +# Required # +Digest::SHA1 +HTML::Parser +Net::DNS +NetAddr::IP +Time::HiRes +LWP +HTTP::Date +IO::Zlib +Text::Diff # Optional add-on for Archive::Tar +Archive::Tar +# Optional # +MIME::Base64 +DB_File +Net::SMTP +Mail::SPF +# Geo::IP # Functionallity not required. +# Net::Ident # Functionallity not required. +IO::Socket::INET6 # Requires Socket6, installed specially in SlackBuild. +IO::Socket::SSL +Compress::Zlib +Mail::DKIM +DBI +Encode::Detect +# Apache::Test # Functionallity not required. +Net::CIDR::Lite # Not listed in docs, but shows as missing during build. +# Net::Patricia # Not listed in docs, but shows as missing during build. Functionallity not required. +BSD::Resource # Not listed in docs, but shows as missing during build. + + +######################## +# Majordomo2 # +# Updated for 20160404 # +######################## +# Required # +Mail::Internet +Mail::Header +MIME::Base64 +IO::Wrap +MIME::Tools +Data::Dumper +Date::Manip +CGI +Digest::SHA1 +Socket +IO::File +IO::Handle +Date::Format +Date::Parse +DirHandle +Safe +POSIX +Net::Domain +File::Basename +File::Copy +Fcntl +Carp +Time::Local +HTML::FormatText +HTML::TreeBuilder +# Optional # +Time::HiRes +Term::ReadLine::Gnu # Or Term::ReadLine::Perl, but mod reqired user input to build +Text::Reflow +# DB_File # Functionallity not required. +# DBI # Functionallity not required. +# DBD::Pg # Functionallity not required. +# DBD::mysql # Functionallity not required. diff --git a/source/cpan-modules/old/slack-desc b/source/cpan-modules/old/slack-desc new file mode 100644 index 0000000..3ca531b --- /dev/null +++ b/source/cpan-modules/old/slack-desc @@ -0,0 +1,19 @@ +# Version: 0.2.3 +# Package description syntax: +# * There must be exactly 11 lines which begin with the package name and ':'. +# * Line up the first '|' of the ruler with the ':' following the package name. +# * A single space should be left after the ':' before any description text. +# * The end '|' of the ruler marks the last columm which should contain text. + + |-----handy-ruler------------------------------------------------------| +%PKG_NAME%: CPAN modules (Various CPAN perl modules) +%PKG_NAME%: +%PKG_NAME%: This package includes various CPAN perl modules which are required +%PKG_NAME%: by some perl applications. +%PKG_NAME%: +%PKG_NAME%: +%PKG_NAME%: +%PKG_NAME%: +%PKG_NAME%: +%PKG_NAME%: +%PKG_NAME%: Packaged by: Darren 'Tadgy' Austin. Built for: %BUILD_OS_ID%%BUILD_LIBDIRSUFFIX%-%BUILD_OS_VERSION_ID% diff --git a/source/cpan-modules/slack-desc b/source/cpan-modules/slack-desc new file mode 100644 index 0000000..0a362a1 --- /dev/null +++ b/source/cpan-modules/slack-desc @@ -0,0 +1,19 @@ +# Version: 0.2.5 +# Package description syntax: +# * There must be exactly 11 lines which begin with the package name and ':'. +# * Line up the first '|' of the ruler with the ':' following the package name. +# * A single space should be left after the ':' before any description text. +# * The end '|' of the ruler marks the last columm which should contain text. + + |-----handy-ruler------------------------------------------------------| +%PKG_NAME%: CPAN modules (Various CPAN perl modules) +%PKG_NAME%: +%PKG_NAME%: This package includes various CPAN perl modules which are required +%PKG_NAME%: by some perl applications. +%PKG_NAME%: +%PKG_NAME%: +%PKG_NAME%: +%PKG_NAME%: +%PKG_NAME%: Warning: This package does not contain any configuration files. +%PKG_NAME%: +%PKG_NAME%: Packaged by: Darren 'Tadgy' Austin. Built for: %DIST_OS_ID%-%DIST_OS_VERSION_ID%. diff --git a/source/cpan-modules/slack-required b/source/cpan-modules/slack-required new file mode 100644 index 0000000..3db79e2 --- /dev/null +++ b/source/cpan-modules/slack-required @@ -0,0 +1,16 @@ +# Version: 0.2.3 +# This is the list of packages which, if the package currently being installed +# is to operate correctly, must be installed on the system - its dependancies. +# For example, 'spamassassin' requires the 'perl' package to operate. +# Packages must be listed one per line and are case sensitive. If multiple +# packages could satisfy a single dependancy (such as 'openssl-solibs' and +# 'openssl' for the SSL library) the packages should be listed in the format: +# | [| ...] +# Specific package versions can be specified using = >= =< < > operators. +# The = operator requires the full package version string (eg, 1.2.3-x86_64-5). +# The >= =< < > operators, can use the short package version string +# (eg, 1.2.3) or the full version string. This file is only used by slapt-get. +db48 +openssl | openssl-solibs +perl +readline | aaa_elflibs