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}