void-packages

Void Source Packages
git clone git://ezup.dev/void-packages.git
Log | Files | Refs | README | LICENSE

build.sh (4461B)


      1#!/bin/bash
      2#
      3# vim: set ts=4 sw=4 et:
      4#
      5# Passed arguments:
      6#   $1 - current pkgname to build [REQUIRED]
      7#   $2 - target pkgname (origin) to build [REQUIRED]
      8#   $3 - xbps target [REQUIRED]
      9#   $4 - cross target [OPTIONAL]
     10#   $5 - internal [OPTIONAL]
     11
     12if [ $# -lt 3 -o $# -gt 5 ]; then
     13    echo "${0##*/}: invalid number of arguments: pkgname targetpkg target [cross-target]"
     14    exit 1
     15fi
     16
     17readonly PKGNAME="$1"
     18readonly XBPS_TARGET_PKG="$2"
     19readonly XBPS_TARGET="$3"
     20readonly XBPS_CROSS_BUILD="$4"
     21readonly XBPS_CROSS_PREPARE="$5"
     22
     23export XBPS_TARGET
     24
     25for f in $XBPS_SHUTILSDIR/*.sh; do
     26    . $f
     27done
     28
     29last="${XBPS_DEPENDS_CHAIN##*,}"
     30case "$XBPS_DEPENDS_CHAIN" in
     31    *,$last,*)
     32        msg_error "Build-time cyclic dependency$last,${XBPS_DEPENDS_CHAIN##*,$last,} detected.\n"
     33esac
     34
     35setup_pkg "$PKGNAME" $XBPS_CROSS_BUILD
     36readonly SOURCEPKG="$sourcepkg"
     37
     38show_pkg_build_options
     39check_pkg_arch $XBPS_CROSS_BUILD
     40
     41if [ -z "$XBPS_CROSS_PREPARE" ]; then
     42    prepare_cross_sysroot $XBPS_CROSS_BUILD || exit $?
     43fi
     44# Install dependencies from binary packages
     45if [ "$PKGNAME" != "$XBPS_TARGET_PKG" -o -z "$XBPS_SKIP_DEPS" ]; then
     46    install_pkg_deps $PKGNAME $XBPS_TARGET_PKG pkg $XBPS_CROSS_BUILD $XBPS_CROSS_PREPARE || exit $?
     47fi
     48
     49if [ "$XBPS_CROSS_BUILD" ]; then
     50    install_cross_pkg $XBPS_CROSS_BUILD || exit $?
     51fi
     52
     53# Fetch distfiles after installing required dependencies,
     54# because some of them might be required for do_fetch().
     55$XBPS_LIBEXECDIR/xbps-src-dofetch.sh $SOURCEPKG $XBPS_CROSS_BUILD || exit 1
     56[ "$XBPS_TARGET" = "fetch" ] && exit 0
     57
     58# Fetch, extract, build and install into the destination directory.
     59$XBPS_LIBEXECDIR/xbps-src-doextract.sh $SOURCEPKG $XBPS_CROSS_BUILD || exit 1
     60[ "$XBPS_TARGET" = "extract" ] && exit 0
     61
     62# Run patch phrase
     63$XBPS_LIBEXECDIR/xbps-src-dopatch.sh $SOURCEPKG $XBPS_CROSS_BUILD || exit 1
     64[ "$XBPS_TARGET" = "patch" ] && exit 0
     65
     66# Run configure phase
     67$XBPS_LIBEXECDIR/xbps-src-doconfigure.sh $SOURCEPKG $XBPS_CROSS_BUILD || exit 1
     68[ "$XBPS_TARGET" = "configure" ] && exit 0
     69
     70# Run build phase
     71$XBPS_LIBEXECDIR/xbps-src-dobuild.sh $SOURCEPKG $XBPS_CROSS_BUILD || exit 1
     72[ "$XBPS_TARGET" = "build" ] && exit 0
     73
     74# Run check phase
     75$XBPS_LIBEXECDIR/xbps-src-docheck.sh $SOURCEPKG $XBPS_CROSS_BUILD || exit 1
     76[ "$XBPS_TARGET" = "check" ] && exit 0
     77
     78# Install pkgs into destdir.
     79$XBPS_LIBEXECDIR/xbps-src-doinstall.sh $SOURCEPKG no $XBPS_CROSS_BUILD || exit 1
     80
     81for subpkg in ${subpackages} ${sourcepkg}; do
     82    $XBPS_LIBEXECDIR/xbps-src-doinstall.sh $subpkg yes $XBPS_CROSS_BUILD || exit 1
     83done
     84for subpkg in ${subpackages} ${sourcepkg}; do
     85    $XBPS_LIBEXECDIR/xbps-src-prepkg.sh $subpkg $XBPS_CROSS_BUILD || exit 1
     86done
     87
     88for subpkg in ${subpackages} ${sourcepkg}; do
     89    if [ "$PKGNAME" = "${subpkg}" -a "$XBPS_TARGET" = "install" ]; then
     90        exit 0
     91    fi
     92done
     93
     94# Clean list of preregistered packages
     95printf "" > ${XBPS_STATEDIR}/.${sourcepkg}_register_pkg
     96# If install went ok generate the binpkgs.
     97for subpkg in ${subpackages} ${sourcepkg}; do
     98    $XBPS_LIBEXECDIR/xbps-src-dopkg.sh $subpkg "$XBPS_REPOSITORY" "$XBPS_CROSS_BUILD" || exit 1
     99done
    100
    101# Registering packages at once per repository. This makes sure that staging is
    102# triggered for all new packages if any of them introduces inconsistencies.
    103cut -d: -f 1,2 ${XBPS_STATEDIR}/.${sourcepkg}_register_pkg | sort -u | \
    104    while IFS=: read -r arch repo; do
    105        paths=$(grep "^$arch:$repo:" "${XBPS_STATEDIR}/.${sourcepkg}_register_pkg" | \
    106            cut -d : -f 2,3 | tr ':' '/')
    107        if [ -n "${arch}" ]; then
    108            msg_normal "Registering new packages to $repo ($arch)\n"
    109            XBPS_TARGET_ARCH=${arch} $XBPS_RINDEX_CMD \
    110                ${XBPS_REPO_COMPTYPE:+--compression $XBPS_REPO_COMPTYPE} ${XBPS_BUILD_FORCEMODE:+-f} -a ${paths}
    111        else
    112            msg_normal "Registering new packages to $repo\n"
    113            if [ -n "$XBPS_CROSS_BUILD" ]; then
    114                $XBPS_RINDEX_XCMD ${XBPS_REPO_COMPTYPE:+--compression $XBPS_REPO_COMPTYPE} \
    115					${XBPS_BUILD_FORCEMODE:+-f} -a ${paths}
    116            else
    117                $XBPS_RINDEX_CMD ${XBPS_REPO_COMPTYPE:+--compression $XBPS_REPO_COMPTYPE} \
    118					${XBPS_BUILD_FORCEMODE:+-f} -a ${paths}
    119            fi
    120        fi
    121    done
    122
    123# pkg cleanup
    124if declare -f do_clean >/dev/null; then
    125    run_func do_clean
    126fi
    127
    128if [ -n "$XBPS_DEPENDENCY" -o -z "$XBPS_KEEP_ALL" ]; then
    129    remove_pkg_autodeps
    130    remove_pkg_wrksrc
    131    remove_pkg $XBPS_CROSS_BUILD
    132    remove_pkg_statedir
    133fi
    134
    135exit 0