void-packages

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

bulk.sh (3324B)


      1# vim: set ts=4 sw=4 et:
      2
      3bulk_getlink() {
      4    local p="${1##*/}"
      5    local target="$(readlink $XBPS_SRCPKGDIR/$p)"
      6
      7    if [ $? -eq 0 -a -n "$target" ]; then
      8        p=$target
      9    fi
     10    echo $p
     11}
     12
     13bulk_sortdeps() {
     14    local _pkgs _pkg pkgs pkg found f x tmpf
     15
     16    _pkgs="$@"
     17    # Iterate over the list and make sure that only real pkgs are
     18    # added to our pkglist.
     19    for pkg in ${_pkgs}; do
     20        found=0
     21        f=$(bulk_getlink $pkg)
     22        for x in ${pkgs}; do
     23            if [ "$x" = "${f}" ]; then
     24                found=1
     25                break
     26            fi
     27        done
     28        if [ $found -eq 0 ]; then
     29            pkgs+="${f} "
     30        fi
     31    done
     32
     33    tmpf=$(mktemp) || exit 1
     34    # Now make the real dependency graph of all pkgs to build.
     35    # Perform a topological sort of all pkgs but only with build dependencies
     36    # that are found in previous step.
     37    for pkg in ${pkgs}; do
     38        _pkgs="$($XBPS_DISTDIR/xbps-src show-build-deps $pkg 2>/dev/null)"
     39        found=0
     40        for x in ${_pkgs}; do
     41            _pkg=$(bulk_getlink $x)
     42            for f in ${pkgs}; do
     43                if [ "${f}" != "${_pkg}" ]; then
     44                    continue
     45                fi
     46                found=1
     47                echo "${pkg} ${f}" >> $tmpf
     48            done
     49        done
     50        [ $found -eq 0 ] && echo "${pkg} ${pkg}" >> $tmpf
     51    done
     52    tsort $tmpf|tac
     53    rm -f $tmpf
     54}
     55
     56bulk_build() {
     57    local sys="$1"
     58    local NPROCS=$(($(nproc)*2))
     59    local NRUNNING=0
     60
     61    if [ "$XBPS_CROSS_BUILD" ]; then
     62        source ${XBPS_COMMONDIR}/cross-profiles/${XBPS_CROSS_BUILD}.sh
     63        export XBPS_ARCH=${XBPS_TARGET_MACHINE}
     64    fi
     65    if ! command -v xbps-checkvers &>/dev/null; then
     66        msg_error "xbps-src: cannot find xbps-checkvers(1) command!\n"
     67    fi
     68
     69    # Compare installed pkg versions vs srcpkgs
     70    if [[ $sys ]]; then
     71        xbps-checkvers -f '%n' -I -D $XBPS_DISTDIR
     72        return $?
     73    fi
     74    # compare repo pkg versions vs srcpkgs
     75    for f in $(xbps-checkvers -f '%n' -D $XBPS_DISTDIR); do
     76        if [ $NRUNNING -eq $NPROCS ]; then
     77            NRUNNING=0
     78            wait
     79        fi
     80        NRUNNING=$((NRUNNING+1))
     81        (
     82            setup_pkg $f $XBPS_TARGET_MACHINE &>/dev/null
     83            if show_avail &>/dev/null; then
     84                echo "$f"
     85            fi
     86        ) &
     87    done
     88    wait
     89    return $?
     90}
     91
     92bulk_update() {
     93    local args="$1" pkgs f rval
     94
     95    pkgs="$(bulk_build ${args})"
     96    [[ -z $pkgs ]] && return 0
     97
     98    msg_normal "xbps-src: the following packages must be rebuilt and updated:\n"
     99    for f in ${pkgs}; do
    100        echo " $f"
    101    done
    102    for f in ${pkgs}; do
    103        XBPS_TARGET_PKG=$f
    104        read_pkg
    105        msg_normal "xbps-src: building ${pkgver} ...\n"
    106        if [ -n "$CHROOT_READY" -a -z "$IN_CHROOT" ]; then
    107            chroot_handler pkg $XBPS_TARGET_PKG
    108        else
    109            $XBPS_LIBEXECDIR/build.sh $f $f pkg $XBPS_CROSS_BUILD
    110        fi
    111        if [ $? -eq 1 ]; then
    112            msg_error "xbps-src: failed to build $pkgver pkg!\n"
    113        fi
    114    done
    115    if [ -n "$pkgs" -a -n "$args" ]; then
    116        echo
    117        msg_normal "xbps-src: updating your system, confirm to proceed...\n"
    118        ${XBPS_SUCMD} "xbps-install --repository=$XBPS_REPOSITORY --repository=$XBPS_REPOSITORY/nonfree -u ${pkgs//[$'\n']/ }" || return 1
    119    fi
    120}