wok annotate tazbb/stuff/tazbb @ rev 6665

Added alsa-lib to alsa-lib-dev depends.
author Christopher Rogers <slaxemulator@gmail.com>
date Tue Oct 12 02:51:14 2010 +0000 (2010-10-12)
parents 5f04c6d8da47
children
rev   line source
pankso@3512 1 #!/bin/sh
pankso@3512 2 # Tazbb - SliTaz Build Bot.
pankso@3512 3 # System wide config file: /etc/slitaz/tazbb.conf
pankso@3512 4 #
pankso@3512 5 # Tazbb is a tool to automate package building, it can be run manually
pankso@3512 6 # or via a cron job. On SliTaz build host, tazbb is run in a chroot env.
pankso@3512 7 #
pankso@3512 8 # (c) 2009 SliTaz GNU/Linux project - GNU gpl v3
pankso@3512 9 #
pankso@3512 10
pankso@3512 11 # Include config file or exit if no file found.
pankso@3512 12 if [ -f "./tazbb.conf" ]; then
pankso@3512 13 . ./tazbb.conf
pankso@3512 14 elif [ -f "/etc/slitaz/tazbb.conf" ]; then
pankso@3512 15 . /etc/slitaz/tazbb.conf
pankso@3512 16 else
pankso@3512 17 echo -e "\nNo config file found: tazbb.conf...\n" && exit 0
pankso@3512 18 fi
pascal@5823 19 LOG_SUFFIX=""
pascal@5823 20 case "$HG_WOK" in
pascal@5823 21 *stable) LOG_SUFFIX="&stable=1";;
pascal@5823 22 esac
pankso@3512 23
pankso@3512 24 # Tazbb is only for root.
pankso@3512 25 if test $(id -u) != 0 ; then
pankso@3512 26 echo -e "\nYou must be root to run: `basename $0`.\n" && exit 0
pankso@3512 27 fi
pankso@3512 28
pankso@3537 29 # Let tazbb finish is work and make sure needed files exist.
pankso@3512 30 if [ -f $LOCK_FILE ]; then
pankso@3512 31 case $1 in
pascal@6122 32 usage|list-*|*block|check-receipt)
pankso@3512 33 continue ;;
pankso@3512 34 *)
pankso@3512 35 echo -e "\nTazbb is already running and locked...\n"
pankso@3512 36 exit 0 ;;
pankso@3512 37 esac
pankso@3512 38 else
pankso@3512 39 mkdir -p $DB_DIR $LOG_DIR
pankso@3512 40 touch $LOCK_FILE $DB_DIR/blocked
pankso@3512 41 fi
pankso@3512 42
pascal@4236 43 # Set KERNEL variable
pascal@4236 44 if [ -s $BUILD_WOK/linux/receipt ]; then
pascal@4236 45 . $BUILD_WOK/linux/receipt
pascal@4236 46 KERNEL=$VERSION
pascal@4236 47 fi
pascal@4236 48
pascal@5916 49 # Get revision
pascal@5922 50 cd $HG_WOK
pascal@5916 51 NEW_REV=`hg head --template '{rev}\n'`
pascal@5922 52 cd - > /dev/null
pascal@5916 53
pankso@3512 54 usage()
pankso@3512 55 {
pankso@3512 56 echo -e "\nSliTaz developers and build host tool\n
pankso@3512 57 \033[1mUsage: \033[0m `basename $0` [command] [--option]
pankso@3512 58 \033[1mCommands: \033[0m\n
pascal@4996 59 usage Print this short usage and command list.
pascal@4996 60 list-pkgs List last cooked packages with date.
pascal@4996 61 report Run in report mode and dont cook anything [--verbose].
pascal@4996 62 cook Cook, install and log a single package build.
pascal@4996 63 cook-all Cook all missing, modified or unbuilt packages.
pascal@4996 64 cook-commit Cook all packages affected by a commit in the last update.
pascal@4996 65 test-pkgs Execute a test suite on all packages [--verbose].
pascal@4996 66 [un]block Block or unblock a package to skip or enable building.
pascal@4996 67 mail Send mail to package maintainer with tazbbmail.
pascal@4996 68 check-depends Verify DEPENDS value with library needs [--verbose].
pascal@4996 69 clean-up Remove old packages [--verbose|--dry-run].
pascal@4996 70 clean-log Remove all generated build log files.\n"
pankso@3512 71 }
pankso@3512 72
pankso@3512 73 status()
pankso@3512 74 {
pankso@3512 75 local CHECK=$?
pankso@3512 76 echo -en "\033[70G"
pankso@3512 77 if [ $CHECK = 0 ]; then
pankso@3512 78 echo "Done"
pankso@3512 79 else
pankso@3512 80 echo "Failed"
pankso@3512 81 fi
pankso@3512 82 return $CHECK
pankso@3512 83 }
pankso@3512 84
pankso@3512 85 top_summary()
pankso@3512 86 {
pankso@3512 87 cat > $DB_DIR/summary << _EOT_
pankso@3512 88 Update : `date`
pankso@3512 89 Revision : $NEW_REV (<a href="$HG_URL/log/$NEW_REV">changelog</a>)
pankso@3512 90 _EOT_
pankso@3512 91 }
pankso@3512 92
pankso@3512 93 packages_summary()
pankso@3512 94 {
pankso@3512 95 if ! grep -q "^Packages" $DB_DIR/summary; then
pankso@3512 96 cat >> $DB_DIR/summary << _EOT_
pankso@3512 97 Packages : `ls $BUILD_WOK | wc -l` in the wok, `cat $DB_DIR/cooklist | wc -l` to cook, \
gokhlayeh@6540 98 `cat $DB_DIR/genpkglist | wc -l` to repack, `cat $DB_DIR/blocked | wc -l` blocked, \
gokhlayeh@6540 99 `cat $DB_DIR/corrupted | wc -l` corrupted
pankso@3512 100 _EOT_
pankso@3512 101 fi
pankso@3512 102 }
pankso@3512 103
pascal@4996 104 VERBOSE=""
pascal@4996 105
pankso@3512 106 packages_summary_update()
pankso@3512 107 {
pankso@3512 108 sed -i s/"[0-9]* in the wok"/"`ls $BUILD_WOK | wc -l` in the wok"/ \
pankso@3512 109 $DB_DIR/summary
pankso@3512 110 sed -i s/"[0-9]* to cook"/"`cat $DB_DIR/cooklist | wc -l` to cook"/ \
pankso@3512 111 $DB_DIR/summary
gokhlayeh@6540 112 sed -i s/"[0-9]* to repack"/"`cat $DB_DIR/genpkglist | wc -l` to repack"/ \
gokhlayeh@6540 113 $DB_DIR/summary
pankso@3512 114 sed -i s/"[0-9]* blocked"/"`cat $DB_DIR/blocked | wc -l` blocked"/ \
pankso@3512 115 $DB_DIR/summary
pankso@3512 116 sed -i s/"[0-9]* corrupted"/"`cat $DB_DIR/corrupted | wc -l` corrupted"/ \
pankso@3512 117 $DB_DIR/summary
pankso@3512 118 }
pankso@3512 119
pankso@3512 120 list_packages()
pankso@3512 121 {
pankso@3512 122 cd $PACKAGES_REPOSITORY
pankso@3512 123 ls -1t *.tazpkg | head -20 | \
pankso@3512 124 while read file
pankso@3512 125 do
pankso@3512 126 echo -n $(stat -c '%y' $PACKAGES_REPOSITORY/$file | cut -d. -f1)
pankso@3512 127 echo " $file"
pankso@3512 128 done
pankso@3512 129 }
pankso@3512 130
pankso@3512 131 show_report()
pankso@3512 132 {
pankso@3512 133 echo "Cooklist"
pankso@3512 134 echo "================================================================================"
pankso@3512 135 cat $DB_DIR/cooklist && echo ""
gokhlayeh@6540 136 echo "Genpkglist"
gokhlayeh@6540 137 echo "================================================================================"
gokhlayeh@6540 138 cat $DB_DIR/genpkglist && echo ""
pascal@4447 139 echo "Packlist"
pascal@4447 140 echo "================================================================================"
pascal@4447 141 cat $DB_DIR/packlist && echo ""
pankso@3512 142 echo "Blocked"
pankso@3512 143 echo "================================================================================"
pankso@3512 144 cat $DB_DIR/blocked && echo ""
pankso@3512 145 echo ""
pankso@3512 146 }
pankso@3512 147
pascal@4163 148 # URL encoding
pascal@4163 149 escape()
pascal@4163 150 {
pascal@4163 151 echo $1 | sed -e 's/+/%2B/g' -e 's|/|%2F|g' -e 's/:/%3A/g'
pascal@4163 152 }
pascal@4163 153
pankso@3512 154 update_wok()
pankso@3512 155 {
pascal@4447 156 local forced
pascal@4447 157 forced=""
pankso@3512 158 echo ""
pascal@4447 159 echo "(updating flavors)" > $DB_DIR/running
pascal@4447 160 cd $HG_FLAVORS
pascal@4447 161 LAST_REV=`hg head --template '{rev}\n'`
pascal@4447 162 hg pull && hg update
pascal@4447 163 NEW_REV=`hg head --template '{rev}\n'`
pascal@4447 164 if [ "$NEW_REV" != "$LAST_REV" ]; then
pascal@4447 165 size=`du -sh $HG_FLAVORS | awk '{ print $1 }'`
pascal@4447 166 echo -n "Copying Hg flavors to the build flavors ($size)... "
pascal@4447 167 cp -a $HG_FLAVORS/* $BUILD_FLAVORS
pascal@4447 168 cp -a $HG_FLAVORS/.hg $BUILD_FLAVORS
pascal@4447 169 echo -e "Done\n"
pascal@4447 170 forced="yes"
pascal@4447 171 fi
pankso@3512 172 echo "(updating wok)" > $DB_DIR/running
pankso@3512 173 cd $HG_WOK
pankso@3512 174 LAST_REV=`hg head --template '{rev}\n'`
pankso@3512 175 hg pull && hg update
pankso@3512 176 NEW_REV=`hg head --template '{rev}\n'`
pankso@3512 177 # Gen a new summary and link last revision for the web interface.
pankso@3512 178 echo -e "\nHg wok : $HG_WOK ($NEW_REV)"
pankso@3512 179 echo -e "Build wok : $BUILD_WOK ($LAST_REV)\n"
pankso@3512 180 top_summary
pankso@3512 181 # Copy Hg wok if new revision or exit to stop process since nothing
pankso@3537 182 # have change (--forced can be used).
pankso@3512 183 if [ "$NEW_REV" != "$LAST_REV" ]; then
pankso@3512 184 size=`du -sh $HG_WOK | awk '{ print $1 }'`
pankso@3512 185 echo -n "Copying Hg wok to the build wok ($size)... "
pankso@3537 186 #rsync -r -n -t $HG_WOK/ $BUILD_WOK/
pankso@3512 187 cp -a $HG_WOK/* $BUILD_WOK
pankso@3512 188 cp -a $HG_WOK/.hg $BUILD_WOK
pankso@3512 189 echo -e "Done\n"
pankso@3512 190 else
pankso@3512 191 if [ "$1" = "cook-all" ] || [ "$1" = "cook-commit" ]; then
pascal@4447 192 if [ "$2" != "--forced" -a -z "$forced" ]; then
pankso@3512 193 echo -e "Nothing to cook...\n"
pankso@3512 194 packages_summary
pankso@3512 195 rm -f $LOCK_FILE && exit 0
pankso@3512 196 fi
pankso@3512 197 fi
pankso@3512 198 fi
pankso@3512 199 }
pankso@3512 200
pascal@4447 201 # Running 'tazbb report' should not pack anything and --verbose option
pascal@4447 202 # can be used to display more messages.
pascal@4447 203 check_flavors()
pascal@4447 204 {
pascal@4447 205 # Clean up last results.
pascal@4447 206 rm -f $DB_DIR/packlist && touch $DB_DIR/packlist
pascal@4447 207 echo ""
pascal@4447 208 echo "Checking all files in: $HG_FLAVORS"
pascal@4447 209 echo "================================================================================"
pascal@4447 210 echo "(checking flavors)" > $DB_DIR/running
pascal@4447 211 for flavor in $(cd $HG_FLAVORS ; ls)
pascal@4447 212 do
pascal@4447 213 [ "$2" = "--verbose" ] && echo "Flavor : $flavor"
pascal@4447 214 if [ ! -s $PACKAGES_REPOSITORY/$flavor.flavor ]; then
pascal@4447 215 echo $flavor >> $DB_DIR/packlist
pascal@4447 216 [ "$1" = "report" ] && echo "Missing : $flavor"
pascal@4447 217 echo "Missing flavor : $flavor" >> $DB_DIR/report
pascal@4447 218 continue
pascal@4447 219 fi
pascal@4452 220 for i in $(find $HG_FLAVORS/$flavor -type f); do
pascal@4447 221 [ $PACKAGES_REPOSITORY/$flavor.flavor -nt \
pascal@4447 222 $i ] && continue
pascal@4447 223 echo $flavor >> $DB_DIR/packlist
pascal@4900 224 [ "$1" = "report" ] && echo "Refresh : $flavor for $i"
pascal@4447 225 echo "Refresh flavor : $flavor" >> $DB_DIR/report
pascal@4447 226 continue 2
pascal@4447 227 done
pascal@4447 228 [ -s $HG_FLAVORS/$flavor/packages.list ] &&
pascal@4447 229 for i in $(cat $HG_FLAVORS/$flavor/packages.list); do
pascal@4902 230 if [ ! -d $BUILD_WOK/$i ]; then
pascal@4901 231 [ "$1" = "report" ] &&
pascal@4901 232 echo "Fix flavor for $i: $flavor"
pascal@4901 233 echo "Fix flavor for $i: $flavor" >> $DB_DIR/report
pascal@4901 234 continue
pascal@4901 235 fi
pascal@4447 236 [ $PACKAGES_REPOSITORY/$flavor.flavor -nt \
pascal@4447 237 $BUILD_WOK/$i/taz ] && continue
pascal@4447 238 echo $flavor >> $DB_DIR/packlist
pascal@4900 239 [ "$1" = "report" ] && echo "Repack : $flavor for $i"
pascal@4447 240 echo "Repack flavor : $flavor" >> $DB_DIR/report
pascal@4447 241 continue 2
pascal@4447 242 done
pascal@4447 243 done
pascal@4963 244
pascal@4963 245 # Check for meta flavors
pascal@4963 246 for flavor in $(cd $HG_FLAVORS ; ls)
pascal@4963 247 do
pascal@4963 248 grep -q ^ROOTFS_SELECTION $HG_FLAVORS/$flavor/receipt || continue
pascal@4963 249 . $HG_FLAVORS/$flavor/receipt
pascal@4963 250 set -- $ROOTFS_SELECTION
pascal@4963 251 if [ $PACKAGES_REPOSITORY/$2.flavor -nt \
pascal@4963 252 $PACKAGES_REPOSITORY/$flavor.flavor ]; then
pascal@4963 253 echo $flavor >> $DB_DIR/packlist
pascal@4963 254 [ "$1" = "report" ] && echo "Refresh : $flavor for $2"
pascal@4963 255 echo "Refresh meta flavor : $flavor" >> $DB_DIR/report
pascal@4963 256 continue
pascal@4963 257 fi
pascal@4963 258 if grep -q ^$2$ $DB_DIR/packlist ; then
pascal@4963 259 echo $flavor >> $DB_DIR/packlist
pascal@4963 260 [ "$1" = "report" ] && echo "Repack : $flavor for $2"
pascal@4963 261 echo "Repack meta flavor : $flavor" >> $DB_DIR/report
pascal@4963 262 continue
pascal@4963 263 fi
pascal@4963 264 done
pascal@4447 265 }
pascal@4447 266
pascal@4447 267 # Here we pack all flavors found in the packlist.
pascal@4447 268 pack_flavors()
pascal@4447 269 {
pascal@4447 270 [ -s $DB_DIR/packlist ] || return
pascal@4447 271 [ $PACKAGES_REPOSITORY/packages.list -nt /var/lib/tazpkg/packages.list ] &&
pascal@4447 272 cp -a $PACKAGES_REPOSITORY/packages.list /var/lib/tazpkg/packages.list
pascal@4447 273 cd $PACKAGES_REPOSITORY
pascal@4447 274 for flavor in $(cat $DB_DIR/packlist)
pascal@4447 275 do
pascal@4447 276 tazlito pack-flavor $flavor
pascal@4447 277 # Remove flavor from the packlist and empty lines for HTML <pre>.
pascal@4447 278 sed -i /"^$flavor$"/d $DB_DIR/packlist
pascal@4447 279 sed -i '/^$/d' $DB_DIR/packlist
pascal@4447 280 done
pascal@4447 281 cd - > /dev/null
pascal@4447 282 }
pascal@4447 283
pankso@3512 284 # Running 'tazbb report' should not cook anything and --verbose option
pankso@3512 285 # can be used to display more messages.
pankso@3512 286 check_wok()
pankso@3512 287 {
pankso@3512 288 # Clean up last results.
pankso@3512 289 rm -f $DB_DIR/cooklist && touch $DB_DIR/cooklist
gokhlayeh@6540 290 rm -f $DB_DIR/genpkglist && touch $DB_DIR/genpkglist
pankso@3512 291 rm -f $DB_DIR/report && touch $DB_DIR/report
pankso@3512 292 rm -f $DB_DIR/unbuilt && touch $DB_DIR/unbuilt
pankso@3512 293 echo "Checking all files in: $HG_WOK"
pankso@3512 294 echo "================================================================================"
pankso@3512 295 echo "(checking wok)" > $DB_DIR/running
pascal@6065 296 TOOLCHAIN="$(. $HG_WOK/slitaz-toolchain/receipt ; echo $DEPENDS)"
pascal@6065 297 TOOLCHAIN="$TOOLCHAIN glibc linux" # break cook loop
pankso@3512 298 for pkg in $HG_WOK/*
pankso@3512 299 do
pankso@3512 300 EXTRAVERSION=""
pankso@3512 301 WANTED=""
pascal@6049 302 BUILD_DEPENDS=""
pascal@6048 303 [ -s $pkg/receipt ] || continue
pankso@3512 304 . $pkg/receipt
pankso@3512 305 [ "$2" = "--verbose" ] && echo "Package : $PACKAGE"
pankso@3512 306 # Skip blocked packages.
pankso@3512 307 if grep -qs "^$PACKAGE$" $DB_DIR/blocked; then
pankso@3512 308 echo "Blocked : $PACKAGE ($VERSION)" && continue
pankso@3512 309 fi
pankso@3512 310
pascal@4447 311 # Some packages may compute VERSION at cook time (bristuff)
pascal@4447 312 if grep -q ^get_version $pkg/receipt; then
pankso@3512 313 . $BUILD_WOK/$PACKAGE/taz/*/receipt
pankso@3512 314 fi
pankso@3512 315
pankso@3537 316 # First check if package exit. Package naming _must_ be in the form of:
pankso@3512 317 # $PACKAGE-$VERSION or $PACKAGE-${VERSION}$EXTRAVERSION (Kernel string).
pankso@3512 318 if [ ! -f $PACKAGES_REPOSITORY/$PACKAGE-$VERSION.tazpkg ]; then
pankso@3512 319 [ -z "$EXTRAVERSION" ] && EXTRAVERSION="_$KERNEL"
pankso@3512 320 if [ ! -f $PACKAGES_REPOSITORY/$PACKAGE-${VERSION}$EXTRAVERSION.tazpkg ]; then
pankso@3512 321 [ "$1" = "report" ] && echo "Missing : $PACKAGE ($VERSION)"
pankso@3512 322 echo "Missing : $PACKAGE ($VERSION)" >> $DB_DIR/report
pankso@3512 323 echo "$PACKAGE" >> $DB_DIR/cooklist
pankso@3512 324 fi
pankso@3512 325 else
pankso@3512 326 # Check if package is up-to-date.
pascal@5881 327 PKG_YEAR=`date -u -r $PACKAGES_REPOSITORY/$PACKAGE-${VERSION}${EXTRAVERSION}.tazpkg '+%Y'`
pascal@5881 328 PKG_DATE=`date -u -r $PACKAGES_REPOSITORY/$PACKAGE-${VERSION}${EXTRAVERSION}.tazpkg '+%m%d%H%M'`
pankso@3512 329 for file in `find $pkg -type f`
pankso@3512 330 do
pascal@5881 331 FILE_YEAR=`date -u -r $file '+%Y'`
pascal@5881 332 FILE_DATE=`date -u -r $file '+%m%d%H%M'`
pankso@3512 333 [ "$2" = "--verbose" ] && echo " -> Checking: $file"
gokhlayeh@6540 334 if [ "$FILE_YEAR" -ge "$PKG_YEAR" -a "$FILE_DATE" -gt "$PKG_DATE" ] && ! grep -q $PACKAGE $DB_DIR/cooklist && ! grep -q $PACKAGE $DB_DIR/genpkglist; then
pankso@3512 335 [ "$1" = "report" ] && echo "Refresh : $PACKAGE ($VERSION)"
pankso@3512 336 echo "Refresh : $PACKAGE ($VERSION)" >> $DB_DIR/report
pankso@3512 337 echo "$PACKAGE" >> $DB_DIR/cooklist
pankso@3512 338 fi
pankso@3512 339 done
pankso@3512 340 fi
gokhlayeh@6540 341
gokhlayeh@6540 342 # Desactivate this feature because it create infinite cooking loops.
gokhlayeh@6540 343 #if ! grep -q $PACKAGE $DB_DIR/cooklist; then
gokhlayeh@6540 344 # case " $TOOLCHAIN " in
gokhlayeh@6540 345 # *\ $PACKAGE\ *) continue;;
gokhlayeh@6540 346 # esac
gokhlayeh@6540 347 # case "$PACKAGE" in
gokhlayeh@6540 348 # tazbb|tazwok|tazpkg) continue;;
gokhlayeh@6540 349 # esac
gokhlayeh@6540 350 # for dep in $BUILD_DEPENDS $TOOLCHAIN ; do
gokhlayeh@6540 351 # [ $BUILD_WOK/$PACKAGE/taz -nt $BUILD_WOK/$dep/taz ] && continue
gokhlayeh@6540 352 # [ "$1" = "report" ] && echo "Refresh : $PACKAGE (older than $dep)"
gokhlayeh@6540 353 # echo "Refresh : $PACKAGE (older than $dep)" >> $DB_DIR/report
gokhlayeh@6540 354 # echo "$PACKAGE" >> $DB_DIR/cooklist
gokhlayeh@6540 355 # break
gokhlayeh@6540 356 # done
gokhlayeh@6540 357 #fi
pankso@3512 358 # Rebuild unbuilt packages list with link to log file. This list
pankso@3537 359 # is also generated by cook_inslall to have real time stats.
pankso@3512 360 if [ ! -d $BUILD_WOK/$PACKAGE/taz ]; then
pascal@5823 361 echo "<a href=\"log.php?package=$(escape $PACKAGE)$LOG_SUFFIX\">$PACKAGE</a>" \
pankso@3512 362 >> $DB_DIR/unbuilt
pankso@3512 363 fi
pankso@3512 364 done
pankso@3512 365 packages_summary
pankso@3512 366 }
pankso@3512 367
pankso@3537 368 # Create a new cooklist and summary (dont modify report) so 'tazbb cook-commit'
pankso@3512 369 # can cook last changes.
pankso@3512 370 check_commit()
pankso@3512 371 {
pankso@3512 372 echo "(checking commit)" > $DB_DIR/running
pankso@3512 373 cd $HG_WOK
pankso@3512 374 # Clean up last results.
pankso@3512 375 rm -f $DB_DIR/cooklist && touch $DB_DIR/cooklist
pankso@3512 376 # Get the name of modified packages by the revision range. +1 last
pankso@3537 377 # commit was build by the previous build.
pankso@3512 378 LAST_REV=$(($LAST_REV+1))
pankso@3512 379 echo -e "Will cook from revision $LAST_REV to $NEW_REV\n"
gokhlayeh@6540 380 for rev in $(seq $LAST_REV $NEW_REV); do
gokhlayeh@6540 381 hg_log=$(hg log --rev=$rev --template "{files}\t{desc}\n")
gokhlayeh@6540 382 for file in $(echo "$hg_log" | cut -f 1); do
gokhlayeh@6540 383 pkg=`echo $file | cut -d "/" -f 1`
gokhlayeh@6540 384 if [ "$(echo $hg_log | grep -i '+build')" ]; then
gokhlayeh@6540 385 if ! grep -q ^$pkg$ $DB_DIR/genpkglist && ! grep -q ^$pkg$ $DB_DIR/cooklist; then
gokhlayeh@6540 386 if [ -f $pkg/receipt ]; then
gokhlayeh@6540 387 . $pkg/receipt
gokhlayeh@6540 388 echo "Commit : $PACKAGE ($VERSION) - genpkg only" >> $DB_DIR/report
gokhlayeh@6540 389 echo "$PACKAGE" >> $DB_DIR/genpkglist
gokhlayeh@6540 390 fi
gokhlayeh@6540 391 fi
gokhlayeh@6540 392 else
gokhlayeh@6540 393 if ! grep -q ^$pkg$ $DB_DIR/cooklist; then
gokhlayeh@6540 394 if [ -f $pkg/receipt ]; then
gokhlayeh@6540 395 . $pkg/receipt
gokhlayeh@6540 396 echo "Commit : $PACKAGE ($VERSION)" >> $DB_DIR/report
gokhlayeh@6540 397 sed "/^$PACKAGE$/d" -i $DB_DIR/genpkglist
gokhlayeh@6540 398 echo "$PACKAGE" >> $DB_DIR/cooklist
gokhlayeh@6540 399 fi
gokhlayeh@6540 400 fi
slaxemulator@6330 401 fi
gokhlayeh@6540 402 done
pankso@3512 403 done
pankso@3512 404 packages_summary
pankso@3512 405 }
pankso@3512 406
gokhlayeh@6540 407 # Genpkg : don't regen the package if source _pkg is missing, this
gokhlayeh@6540 408 # function re-generate the package only if all is fine, else it
gokhlayeh@6540 409 # does nothing and forget the package.
gokhlayeh@6540 410 genpkg_package()
gokhlayeh@6540 411 {
gokhlayeh@6540 412 EXTRAVERSION=""
gokhlayeh@6540 413 DEPENDS=""
gokhlayeh@6540 414 BUILD_DEPENDS=""
gokhlayeh@6540 415 SOURCE=""
gokhlayeh@6540 416 WANTED=""
gokhlayeh@6540 417 echo "(Repack <a href=\"log.php?package=$(escape $pkg)$LOG_SUFFIX\">$pkg</a>)" > $DB_DIR/running
gokhlayeh@6540 418 tazwok check-receipt $pkg && echo 'N' | tazwok genpkg $pkg
gokhlayeh@6540 419 }
gokhlayeh@6540 420
pascal@4174 421 # Cook one package
pascal@4174 422 cook_package()
pascal@4174 423 {
pascal@4174 424 EXTRAVERSION=""
pascal@4174 425 DEPENDS=""
pascal@4174 426 BUILD_DEPENDS=""
pascal@4174 427 SOURCE=""
pascal@4174 428 WANTED=""
pascal@5823 429 echo "(cooking <a href=\"log.php?package=$(escape $pkg)$LOG_SUFFIX\">$pkg</a>)" > $DB_DIR/running
pascal@4174 430 tazwok clean $pkg
pascal@6111 431 script -c "tazbb check-receipt $pkg && echo 'install' | tazwok cook $pkg" $LOG_DIR/$pkg.log
pascal@4174 432 # Install new package (important for new shared libs). Note
pascal@4174 433 # that tests are done separatly with 'test_packages' and should
pascal@4174 434 # be done by tazwok.
pascal@4174 435 if [ -f $BUILD_WOK/$pkg/taz/*/receipt ]; then
pascal@5013 436 TAZBB_NO_INSTALL=""
pascal@4174 437 . $BUILD_WOK/$pkg/taz/*/receipt
pascal@5013 438 [ -n "$TAZBB_NO_INSTALL" ] && return 0
pascal@4174 439 echo "(installing $PACKAGE-${VERSION}$EXTRAVERSION.tazpkg)" \
pascal@4174 440 > $DB_DIR/running
pascal@6143 441 script -ac "yes | tazpkg install \
pascal@6143 442 $PACKAGES_REPOSITORY/$PACKAGE-${VERSION}$EXTRAVERSION.tazpkg --forced" \
pascal@6143 443 $LOG_DIR/$pkg.log
pascal@4174 444 return 0
pascal@4174 445 fi
pascal@4174 446 return 1
pascal@4174 447 }
pascal@4174 448
pascal@4174 449 # Sort list according WANTED and BUILD_DEPENDS
pascal@4174 450 sort_cook_list()
pascal@4174 451 {
pascal@4174 452 sort | while read pkg; do
pascal@4174 453 echo -n "$pkg"
pascal@4174 454 WANTED=""
pascal@4174 455 BUILD_DEPENDS=""
pascal@4174 456 . $BUILD_WOK/$pkg/receipt
pascal@4185 457 MISSING=""
pascal@4174 458 for i in $WANTED $BUILD_DEPENDS ; do
pascal@6091 459 # Verify that the dependancy exists and is older
pascal@6094 460 [ -f $BUILD_WOK/$i/taz/*/receipt ] &&
pascal@6094 461 [ $BUILD_WOK/$pkg/taz/*/receipt \
pascal@6094 462 -nt $BUILD_WOK/$i/taz/*/receipt ] && continue
pascal@6094 463 WANTED=""
pascal@6094 464 [ -f $BUILD_WOK/$i/receipt ] &&
pascal@6094 465 . $BUILD_WOK/$i/receipt
pascal@6094 466 # This dependancy may be cooked
pascal@6094 467 # by another package
pascal@6094 468 [ -n "$WANTED" ] && i=$WANTED
pascal@6091 469 case " $MISSING " in
pascal@6091 470 *\ $i\ *);;
pascal@6091 471 *) echo -n " $i";;
pascal@6091 472 esac
pascal@6091 473 MISSING="$MISSING $i"
pascal@4174 474 done
pascal@4174 475 echo ""
pascal@6100 476 done | awk '{ deps[$1] = $0; }
pascal@6100 477 END {
pascal@6230 478 k=0;
pascal@6100 479 while (1) {
pascal@6100 480 skipped = 0;
pascal@6100 481 done = 0;
pascal@6100 482 for (entry in deps) {
pascal@6100 483 for (i = split(deps[entry], pkg, " "); i > 1; i--)
pascal@6100 484 if (deps[pkg[i]] != "") break;
pascal@6100 485 if (i == 1) {
pascal@6230 486 cook[k++] = pkg[1];
pascal@6100 487 deps[pkg[1]] = "";
pascal@6100 488 done++;
pascal@6100 489 }
pascal@6100 490 else if (i > 1) skipped++;
pascal@6100 491 }
pascal@6100 492 if (skipped == 0) break;
pascal@6100 493 if (done == 0) { # cross deps !!
pascal@6100 494 for (entry in deps) {
pascal@6100 495 if (split(deps[entry], pkg, " ") > 1)
pascal@6100 496 print pkg[1];
pascal@6100 497 }
pascal@6100 498 break;
pascal@4174 499 }
pascal@4174 500 }
pascal@6230 501 while (k > 0) print cook[--k];
pascal@4185 502 }
pascal@4174 503 '
pascal@4174 504 }
pascal@4174 505
pankso@3512 506 # Here we cook all packages found in the cooklist.
pankso@3512 507 cook_install()
pankso@3512 508 {
gokhlayeh@6540 509 # First repack packages in genpkglist
gokhlayeh@6540 510 for pkg in `cat $DB_DIR/genpkglist`; do
gokhlayeh@6540 511 genpkg_package $pkg
gokhlayeh@6540 512
gokhlayeh@6540 513 # Remove package from the genpkglist and empty lines for HTML <pre>.
gokhlayeh@6540 514 sed -i /"^$pkg$"/d $DB_DIR/genpkglist
gokhlayeh@6540 515 sed -i '/^$/d' $DB_DIR/genpkglist
gokhlayeh@6540 516 packages_summary_update
gokhlayeh@6540 517 done
gokhlayeh@6540 518
pankso@3512 519 echo "" > $DB_DIR/unbuilt
pascal@4174 520 for pkg in `cat $DB_DIR/cooklist | sort_cook_list`
pankso@3512 521 do
pascal@4174 522 if ! cook_package $pkg; then
pankso@3512 523 # Link to build log.
pascal@5823 524 echo "<a href=\"log.php?package=$(escape $pkg)$LOG_SUFFIX\">$pkg</a>" >> \
pankso@3512 525 $DB_DIR/unbuilt
pankso@3512 526 fi
pascal@4996 527 missing_depends="$(check_depends_pkg $pkg)"
pascal@4996 528 if [ -n "$missing_depends" ]; then
pascal@4996 529 cat >> $LOG_DIR/$pkg.log <<EOT
pascal@4996 530
pascal@4996 531 Update $pkg receipt for DEPENDS :
pascal@4996 532 The package $pkg depends on packages $missing_depends
pascal@4996 533
pascal@4996 534 EOT
pascal@4996 535 # Unbuild package
pascal@4996 536 rm -rf $BUILD_WOK/$pkg/taz
pascal@4996 537 # Link to build log.
pascal@5823 538 echo "<a href=\"log.php?package=$(escape $pkg)$LOG_SUFFIX\">$pkg</a>" >> \
pascal@4996 539 $DB_DIR/unbuilt
pascal@4996 540 fi
pankso@3512 541 # Remove package from the cooklist and empty lines for HTML <pre>.
pankso@3512 542 sed -i /"^$pkg$"/d $DB_DIR/cooklist
pankso@3512 543 sed -i '/^$/d' $DB_DIR/cooklist
pankso@3537 544 packages_summary_update
pankso@3512 545 done
pankso@3512 546 }
pankso@3512 547
pascal@6111 548 # Check for misc variables
pascal@6111 549 check_variables()
pascal@6111 550 {
pascal@6111 551 PACKAGE=""
pascal@6111 552 VERSION=""
pascal@6111 553 EXTRAVERSION=""
pascal@6111 554 CATEGORY=""
pascal@6111 555 SHORT_DESC=""
pascal@6111 556 MAINTAINER=""
pascal@6111 557 WEB_SITE=""
pascal@6111 558 PACKED_SIZE=""
pascal@6111 559 UNPACKED_SIZE=""
pascal@6111 560 . $BUILD_WOK/$1/receipt
pascal@6111 561 if [ "$PACKAGE" != "$1" ]; then
pascal@6111 562 echo "The PACKAGE variable should be $1"
pascal@6111 563 return 1
pascal@6111 564 fi
pascal@6111 565 if [ -z "$VERSION" ]; then
pascal@6111 566 echo "No VERSION in $1"
pascal@6111 567 return 1
pascal@6111 568 fi
pascal@6111 569 if [ -z "$SHORT_DESC" ]; then
pascal@6111 570 echo "No SHORT_DESC in $1"
pascal@6111 571 return 1
pascal@6111 572 fi
pascal@6111 573 case "$MAINTAINER" in
pascal@6111 574 '') echo "No MAINTAINER in $1"
pascal@6111 575 return 1 ;;
pascal@6111 576 *\<*|*\>*)
pascal@6111 577 echo "Invalid MAINTAINER in $1"
pascal@6111 578 return 1 ;;
pascal@6111 579 *@*) ;;
pascal@6111 580 *) echo "No email address for MAINTAINER in $1"
pascal@6111 581 return 1 ;;
pascal@6111 582 esac
pascal@6111 583 if [ -z "$WEB_SITE" ]; then
pascal@6111 584 echo "No WEB_SITE in $1"
pascal@6111 585 return 1
pascal@6111 586 fi
pascal@6111 587 if [ -n "$EXTRAVERSION" ]; then
pascal@6111 588 echo "Hardcoded EXTRAVERSION in $1"
pascal@6111 589 return 1
pascal@6111 590 fi
pascal@6111 591 if [ -n "$PACKED_SIZE" ]; then
pascal@6111 592 echo "Hardcoded PACKED_SIZE in $1"
pascal@6111 593 return 1
pascal@6111 594 fi
pascal@6111 595 if [ -n "$UNPACKED_SIZE" ]; then
pascal@6111 596 echo "Hardcoded UNPACKED_SIZE in $1"
pascal@6111 597 return 1
pascal@6111 598 fi
pascal@6111 599 case " base-system x-window utilities network graphics multimedia \
pascal@6111 600 office development system-tools security games misc meta \
pascal@6111 601 non-free " in
pascal@6111 602 *\ $CATEGORY\ *);;
pascal@6111 603 *) echo "Invalid CATEGORY in $1 : $CATEGORY"
pascal@6111 604 return 1;
pascal@6111 605 esac
pascal@6111 606 return 0
pascal@6111 607 }
pascal@6111 608
pascal@6111 609 # Check for WANTED version
pascal@6111 610 check_wanted_version()
pascal@6111 611 {
pascal@6111 612 WANTED=""
pascal@6111 613 . $BUILD_WOK/$1/receipt
pascal@6123 614 if [ -n "$WANTED" ]; then
pascal@6111 615 expected=$VERSION
pascal@6111 616 VERSION=
pascal@6111 617 . $BUILD_WOK/$WANTED/receipt
pascal@6111 618 if [ "$VERSION" != "$expected" ]; then
pascal@6121 619 echo "$1: expected wanted version $expected, found $VERSION"
pascal@6111 620 return 1
pascal@6111 621 fi
pascal@6111 622 fi
pascal@6111 623 return 0
pascal@6111 624 }
pascal@6111 625
pascal@6111 626 # Check for loop in BUILD_DEPENDS/WANTED
pascal@6111 627 check_build_depends()
pascal@6111 628 {
pascal@6111 629 local i
pascal@6111 630 BUILD_DEPENDS=""
pascal@6111 631 WANTED=""
pascal@6111 632 . $BUILD_WOK/$1/receipt
pascal@6111 633 for i in $BUILD_DEPENDS $WANTED ; do
pascal@6111 634 case " $2 " in
pascal@6111 635 *\ $i\ *) echo "Loop in BUILD_DEPENDS/WANTED chain $2 $i"
pascal@6111 636 return 1 ;;
pascal@6111 637 *) check_build_depends $i "$2 $1" || return 1 ;;
pascal@6111 638 esac
pascal@6111 639 done
pascal@6111 640 return 0
pascal@6111 641 }
pascal@6111 642
pascal@4996 643 # Build depends_to_skip list with packages to remove from depends_to_add list
pascal@4996 644 # These packages are already present in depends_to_add trees
pascal@4996 645 scan_depends_to_skip()
pascal@4996 646 {
pascal@4996 647 local i
pascal@4996 648 case " $depends_to_skip " in
pascal@4996 649 *\ $1\ *) return;;
pascal@4996 650 esac
pascal@4996 651 [ -d $BUILD_WOK/$1 ] || return
pascal@4996 652 DEPENDS=""
pascal@4996 653 . $BUILD_WOK/$1/receipt
pascal@4996 654 for i in $DEPENDS ; do
pascal@4996 655 case " $depends_to_add " in
pascal@4996 656 *\ $i\ *) depends_to_skip="$depends_to_skip $i";;
pascal@4996 657 esac
pascal@4996 658 done
pascal@4996 659 for i in $DEPENDS ; do
pascal@4996 660 scan_depends_to_skip $i
pascal@4996 661 done
pascal@4996 662 }
pascal@4996 663
pascal@4996 664 # Reduce depends list by scanning nested depends
pascal@4996 665 show_missing_depends()
pascal@4996 666 {
pascal@4996 667 local i
pascal@4996 668 depends_to_add=""
pascal@4996 669 depends_to_skip="$2"
pascal@4996 670 for i in $1 ; do
pascal@4996 671 case " $depends_to_add " in
pascal@4996 672 *\ $i\ *) continue;;
pascal@4996 673 esac
pascal@4996 674 depends_to_add="$depends_to_add$i "
pascal@4996 675 done
pascal@4996 676 for i in $depends_to_add ; do
pascal@4996 677 scan_depends_to_skip $i
pascal@4996 678 done
pascal@4996 679 for i in $depends_to_add ; do
pascal@4996 680 case " $depends_to_skip " in
pascal@4996 681 *\ $i\ *) continue;;
pascal@4996 682 esac
pascal@4996 683 echo -n "$i "
pascal@4996 684 done
pascal@4996 685 }
pascal@4996 686
pascal@4996 687 # Build all_depends variable
pascal@4996 688 scan_dep()
pascal@4996 689 {
pascal@4996 690 local i
pascal@4996 691 all_depends="$all_depends$PACKAGE "
pascal@4996 692 for i in $DEPENDS $SUGGESTED ; do
pascal@4996 693 case " $all_depends " in
pascal@4996 694 *\ $i\ *) continue;;
pascal@4996 695 esac
pascal@4996 696 [ -d $BUILD_WOK/$i ] || {
pascal@4996 697 all_depends="$all_depends$i "
pascal@4996 698 continue
pascal@4996 699 }
pascal@4996 700 DEPENDS=""
pascal@4996 701 SUGGESTED=""
pascal@4996 702 . $BUILD_WOK/$i/receipt
pascal@4996 703 scan_dep
pascal@4996 704 done
pascal@4996 705 }
pascal@4996 706
pascal@4996 707 # Check for ELF file
pascal@4996 708 is_elf()
pascal@4996 709 {
pascal@4996 710 [ "$(dd if=$1 bs=1 skip=1 count=3 2> /dev/null)" = "ELF" ]
pascal@4996 711 }
pascal@4996 712
pascal@4996 713 # Print shared library dependencies
pascal@4996 714 ldd()
pascal@4996 715 {
pascal@4996 716 LD_PRELOAD="" LD_TRACE_LOADED_OBJECTS=1 /lib/ld*.so $1 2> /dev/null
pascal@4996 717 }
pascal@4996 718
pascal@4996 719 # scan a file for shared libraries and display according package names
pascal@4996 720 check_depends_file()
pascal@4996 721 {
pascal@4996 722 file=$1
pascal@4996 723 is_elf $file || continue
pascal@4996 724 case "$file" in
pascal@4996 725 *.o|*.ko|*.ko.gz) continue;;
pascal@4996 726 esac
pascal@4996 727 [ -s /tmp/files.list.tazbb$$ ] ||
pascal@4996 728 unlzma -c $PACKAGES_REPOSITORY/files.list.lzma >/tmp/files.list.tazbb$$
pascal@4996 729 ldd $file | while read lib rem; do
pascal@4996 730 case "$lib" in
pascal@4996 731 statically|linux-gate.so*|ld-*.so|*/ld-*.so)
pascal@4996 732 continue;;
pascal@4996 733 esac
pascal@4996 734 for dep in $(grep $lib /tmp/files.list.tazbb$$ | cut -d: -f1); do
pascal@4996 735 case " $all_depends " in
pascal@4996 736 *\ $dep\ *) continue 2;;
pascal@4996 737 esac
pascal@4996 738 for vdep in $(grep $dep $PACKAGES_REPOSITORY/packages.equiv | cut -d= -f1); do
pascal@4996 739 case " $all_depends " in
pascal@4996 740 *\ $vdep\ *) continue 3;;
pascal@4996 741 esac
pascal@4996 742 done
pascal@4996 743 done
pascal@4996 744 [ -n "$dep" ] || dep="UNKNOWN"
pascal@4996 745 all_depends="$all_depends $dep"
pascal@4996 746 if [ -n "$VERBOSE" ]; then
pascal@4996 747 echo "${file#*fs} depends on package $dep for the shared library $lib" 1>&2
pascal@4996 748 fi
pascal@4996 749 echo -n "$dep "
pascal@4996 750 done
pascal@4996 751 }
pascal@4996 752
pascal@4996 753 DEFAULT_DEPENDS="glibc-base"
pascal@4996 754
pascal@4996 755 # scan a package for shared libraries and display missing package in DEPENDS
pascal@4996 756 check_depends_pkg()
pascal@4996 757 {
pascal@4996 758 pkg=$1
pascal@4996 759 echo "(checking depends for $pkg)" > $DB_DIR/running
pascal@4996 760 tmp=/tmp/tazbb$$
pascal@4996 761 mkdir $tmp
pascal@4996 762 package=$(basename $pkg)
pascal@4996 763 if ! cd ${package%%-*}*/taz/${package%.tazpkg}/.. 2> /dev/null; then
pascal@4996 764 cd $tmp
pascal@4996 765 tazpkg extract $pkg > /dev/null 2>&1
pascal@4996 766 fi
pascal@4996 767 . */receipt
pascal@4996 768 all_depends="$DEFAULT_DEPENDS "
pascal@4996 769 scan_dep
pascal@4996 770 toadd=$(find */fs -type f | while read file ; do
pascal@4996 771 check_depends_file $file
pascal@4996 772 done)
pascal@4996 773 . */receipt
pascal@4996 774 rm -rf */
pascal@4996 775 cd - > /dev/null
pascal@4996 776 rm -rf $tmp
pascal@4996 777 show_missing_depends "$toadd" "$DEPENDS $SUGGESTED"
pascal@4996 778 }
pascal@4996 779
pascal@4996 780 check_depends_this_file()
pascal@4996 781 {
pascal@4996 782 file=$1
pascal@4996 783 all_depends="$DEFAULT_DEPENDS "
pascal@4996 784 scan_dep
pascal@4996 785 check_depends_file $file
pascal@4996 786 }
pascal@4996 787
pankso@3512 788 # Remove old packages in the build wok and clean pkgs repository. The
pankso@3512 789 # Hg wok is copied into the build wok so packages removed by hg must be
pankso@3512 790 # removed. To remove old packages in the repository we look into the
pankso@3537 791 # build wok and dont remove unbuilt packages. Clean-up will also remove
pankso@3512 792 # all corrupted packages.
pankso@3512 793 clean_up()
pankso@3512 794 {
pankso@3512 795 touch $DB_DIR/removed
pankso@3512 796 echo -e "\nCleaning the build wok, old and corrupted packages...\n"
pankso@3512 797 echo "(cleaning)" > $DB_DIR/running
pankso@4208 798 for pkg in `ls $BUILD_WOK`
pankso@3512 799 do
pankso@4208 800 if [ ! -d $HG_WOK/$pkg ]; then
pankso@3512 801 case $2 in
pankso@3512 802 --dry-run)
pankso@3512 803 echo "Removing directory : $pkg" ;;
pankso@3512 804 --verbose)
pankso@3512 805 echo "Removing directory : $pkg"
pankso@3512 806 rm -rf $BUILD_WOK/$pkg ;;
pankso@3512 807 *)
pankso@3512 808 rm -rf $BUILD_WOK/$pkg ;;
pankso@3512 809 esac
pankso@3512 810 fi
pankso@3512 811 done
pankso@3512 812 # Build a packages list with EXTRAVERSION so we can grep into it.
pankso@3512 813 rm -f $DB_DIR/packaged && touch $DB_DIR/packaged
pankso@3512 814 for receipt in $BUILD_WOK/*/taz/*/receipt
pankso@3512 815 do
pankso@3512 816 EXTRAVERSION=""
pankso@3512 817 . $receipt
pankso@3512 818 echo "$PACKAGE-${VERSION}$EXTRAVERSION.tazpkg" >> $DB_DIR/packaged
pankso@3512 819 done
pankso@3512 820 for pkg in `cd $PACKAGES_REPOSITORY && ls *.tazpkg`
pankso@3512 821 do
pankso@3512 822 if ! grep -q "^$pkg$" $DB_DIR/packaged; then
pankso@3512 823 case $2 in
pankso@3512 824 --dry-run)
pankso@3512 825 echo "Removing package : $pkg" ;;
pankso@3512 826 --verbose)
pankso@3512 827 echo "Removing package : $pkg"
pankso@3512 828 echo "$pkg" >> $DB_DIR/removed
pankso@3512 829 rm -f $PACKAGES_REPOSITORY/$pkg ;;
pankso@3512 830 *)
pankso@3512 831 echo "$pkg" >> $DB_DIR/removed
pankso@3512 832 rm -f $PACKAGES_REPOSITORY/$pkg ;;
pankso@3512 833 esac
pankso@3512 834 fi
pankso@3512 835 done
pankso@3512 836 # Remove all corrupted packages
pankso@3512 837 for pkg in `cat $DB_DIR/corrupted | awk '{ print $3 }'`
pankso@3512 838 do
pankso@3512 839 case $2 in
pankso@3512 840 --dry-run)
pankso@3512 841 echo "Removing corrupted: $pkg" ;;
pankso@3512 842 --verbose)
pankso@3512 843 echo "Removing corrupted: $pkg"
pankso@3512 844 echo "$pkg" >> $DB_DIR/removed
pankso@3512 845 rm -rf $PACKAGES_REPOSITORY/$pkg ;;
pankso@3512 846 *)
pankso@3512 847 echo "$pkg" >> $DB_DIR/removed
pankso@3512 848 rm -rf $PACKAGES_REPOSITORY/$pkg ;;
pankso@3512 849 esac
pankso@3512 850 done
pankso@3512 851 echo ""
pankso@3512 852 # Keep the 20 last removed packages list.
pankso@3512 853 cat $DB_DIR/removed | tail -n 20 > /tmp/removed.tail
pankso@3512 854 mv -f /tmp/removed.tail $DB_DIR/removed
pankso@5132 855 # Clean packages stuff/ directory
pankso@5132 856 echo -e "\nCleaning the build wok stuff/ directories...\n"
pankso@5132 857 for pkg in `ls $BUILD_WOK`
pankso@5132 858 do
pankso@5132 859 if [ -d "$BUILD_WOK/$pkg/stuff" ]; then
pankso@5132 860 cd $BUILD_WOK/$pkg
pankso@5132 861 for file in `find stuff -type f`
pankso@5132 862 do
pankso@5132 863 if [ ! -f "$HG_WOK/$pkg/$file" ]; then
pankso@5132 864 echo "Removing: $pkg/$file"
pankso@5132 865 rm $file
pankso@5132 866 fi
pankso@5132 867 done
pankso@5132 868 fi
pankso@5132 869 done
pankso@3512 870 }
pankso@3512 871
pankso@3512 872 blocked_urls()
pankso@3512 873 {
pankso@3512 874 rm -f $DB_DIR/blocked.urls
pankso@3512 875 for pkg in `cat $DB_DIR/blocked`
pankso@3512 876 do
pankso@3512 877 if [ -f $LOG_DIR/$pkg.log ]; then
pascal@5823 878 echo "<a href=\"log.php?package=$(escape $pkg)$LOG_SUFFIX\">$pkg</a>" >> \
pankso@3512 879 $DB_DIR/blocked.urls
pankso@3512 880 else
pankso@3512 881 echo "$pkg" >> $DB_DIR/blocked.urls
pankso@3512 882 fi
pankso@3512 883 done
pankso@3512 884 }
pankso@3512 885
pankso@3512 886 # 4k, not a meta or a get-* package and no files = buggy package
pankso@3512 887 test_packages()
pankso@3512 888 {
pankso@3512 889 echo -e "\nTesting all packages in: $PACKAGES_REPOSITORY"
pankso@3512 890 echo "================================================================================"
pankso@3512 891 echo "(testing packages)" > $DB_DIR/running
pankso@3512 892 rm -f $DB_DIR/corrupted && touch $DB_DIR/corrupted
pankso@3512 893 for pkg in $PACKAGES_REPOSITORY/*.tazpkg
pankso@3512 894 do
pankso@3512 895 tmp=/tmp/bb-test.$$
pankso@3512 896 CATEGORY=""
pankso@3512 897 if du $pkg | grep -qw '^4' && ! echo `basename $pkg` | grep -q '^get-'; then
pankso@3512 898 mkdir -p $tmp && cd $tmp
pascal@4700 899 cpio -i receipt >/dev/null 2>&1 < $pkg
pankso@3512 900 . ./receipt
pankso@3512 901 if [ "$CATEGORY" != "meta" ]; then
pankso@3512 902 [ "$2" = "--verbose" ] && echo "Testing: $PACKAGE"
pascal@5882 903 cpio -i fs.cpio.gz >/dev/null 2>&1 < $pkg
pascal@5882 904 cpio -i fs.cpio.lzma >/dev/null 2>&1 < $pkg
pascal@4850 905 if [ ! -f fs.cpio.gz -a ! -f fs.cpio.lzma ]; then
pankso@3516 906 echo "Missing filesystem `basename $pkg`"
pankso@3512 907 if [ -f $LOG_DIR/$PACKAGE.log ];then
pascal@5823 908 echo "Missing filesystem `basename $pkg` <a href=\"log.php?package=$(escape $PACKAGE)$LOG_SUFFIX\">Log</a>" \
pankso@3512 909 >> $DB_DIR/corrupted
pankso@3512 910 else
pankso@3516 911 echo "Missing filesystem `basename $pkg`" \
pankso@3512 912 >> $DB_DIR/corrupted
pankso@3512 913 fi
pankso@3512 914 else
pascal@4850 915 ( zcat fs.cpio.gz 2> /dev/null || \
pascal@4850 916 unlzma -c fs.cpio.lzma ) | \
pascal@4850 917 cpio -id >/dev/null 2>&1
pascal@4395 918 files=`find fs -type f -o -type l`
pankso@3512 919 if [ -z "$files" ]; then
pankso@3516 920 echo "Empty filesystem `basename $pkg`"
pankso@3512 921 if [ -f $LOG_DIR/$PACKAGE.log ]; then
pascal@5823 922 echo "Empty filesystem `basename $pkg` <a href=\"log.php?package=$(escape $PACKAGE)$LOG_SUFFIX\">Log</a>" \
pankso@3512 923 >> $DB_DIR/corrupted
pankso@3512 924 else
pankso@3516 925 echo "Empty filesystem `basename $pkg`" \
pankso@3512 926 >> $DB_DIR/corrupted
pankso@3512 927 fi
pankso@3512 928 fi
pankso@3512 929 fi
pankso@3512 930 fi
pankso@3512 931 cd .. && rm -rf $tmp
pankso@3512 932 fi
pankso@3512 933 done
pankso@3512 934 packages_summary_update
pankso@3512 935 echo ""
pankso@3512 936 }
pankso@3512 937
pascal@4447 938 # Generate flavor list
pascal@4447 939 gen_flavor_list()
pascal@4447 940 {
pascal@4447 941 cd $PACKAGES_REPOSITORY
pascal@4447 942 noheader=""
pascal@4447 943 for i in *.flavor; do
pascal@4447 944 tazlito show-flavor $i --brief $noheader
pascal@4447 945 noheader="--noheader"
pascal@4447 946 done > flavors.list
pascal@4447 947 cd - > /dev/null
pascal@4447 948 }
pascal@4447 949
pankso@3512 950 case "$1" in
pankso@3512 951 list-pkgs)
pankso@3512 952 # List last cooked packages.
pankso@3512 953 list_packages ;;
pankso@3512 954 report)
pankso@3512 955 # Run in report mode. If an update is done we must cook-all to
pankso@3512 956 # rebuild all updated packages.
pankso@3512 957 [ "$2" == "--update" ] && update_wok $@ || echo ""
pankso@3512 958 check_wok $@
pascal@4447 959 check_flavors $@
pankso@3512 960 test_packages $@
pankso@3512 961 show_report ;;
pankso@4110 962 cook)
pankso@4110 963 # Cook, install and log a single package build.
pankso@4110 964 if [ -z $2 ]; then
pankso@4110 965 echo "Please specify a package on the command line."
pankso@4110 966 rm -f $LOCK_FILE && exit 0
pankso@4110 967 fi
pankso@4110 968 pkg=$2
pankso@4110 969 echo "Starting to cook and install: $pkg"
pascal@4174 970 if ! cook_package $pkg; then
pankso@4110 971 echo "Unable to install: $pkg"
pankso@4110 972 fi ;;
pankso@3512 973 cook-all)
pankso@3512 974 # Update wok, gen report (with cooklist), cook all packages, test,
pankso@3512 975 # clean, gen new report and lists.
pankso@3512 976 update_wok $@
pankso@3512 977 check_wok $@
pankso@3512 978 cook_install
pankso@3512 979 test_packages $@
pascal@5034 980 check_flavors $@
pascal@5034 981 pack_flavors
pankso@3512 982 clean_up $@
pankso@3512 983 check_wok $@
pankso@3512 984 echo "(generating lists)" > $DB_DIR/running
pankso@3512 985 tazwok gen-list --text
pascal@4447 986 check_flavors $@
pascal@4447 987 gen_flavor_list
pankso@3512 988 echo "" ;;
pankso@3512 989 cook-commit)
pankso@3512 990 # Cook all packages affected by the last commits in the wok.
pankso@3529 991 # Clean up is done only by cook-all to avoid rebuild of corrupted
pankso@3529 992 # packages on each commit.
pankso@3512 993 update_wok $@
pankso@3512 994 check_commit
pankso@3512 995 cook_install
pankso@3512 996 test_packages $@
pascal@5034 997 check_flavors $@
pascal@5034 998 pack_flavors
pankso@3512 999 check_wok $@
pascal@5034 1000 check_flavors $@
pankso@3512 1001 echo "(generating lists)" > $DB_DIR/running
pankso@3512 1002 tazwok gen-list --text
pascal@4447 1003 gen_flavor_list
pankso@3512 1004 echo "" ;;
pankso@3512 1005 block)
pankso@3512 1006 # Add a pkg name to the list of blocked packages.
pankso@3512 1007 echo ""
pankso@3512 1008 if grep -qs "^$2$" $DB_DIR/blocked; then
pankso@3512 1009 echo -e "$2 is already in the blocked packages list."
pankso@3512 1010 else
pankso@3512 1011 echo -n "Adding $2 to : $DB_DIR/blocked... "
pankso@3512 1012 echo "$2" >> $DB_DIR/blocked && echo "Done"
pankso@3512 1013 if grep -q "^$2$" $DB_DIR/cooklist; then
pankso@3512 1014 echo -n "Removing $2 from : $DB_DIR/cooklist... "
pankso@3512 1015 sed -i /"^$2$"/d $DB_DIR/cooklist && echo "Done"
pankso@3512 1016 packages_summary_update
pankso@3512 1017 fi
pankso@3512 1018 fi
pankso@3512 1019 blocked_urls
pankso@3512 1020 echo "" ;;
pankso@3512 1021 unblock)
pankso@3512 1022 # Remove a pkg name from the list of blocked packages.
pankso@3512 1023 echo ""
pankso@3512 1024 if grep -qs "^$2$" $DB_DIR/blocked; then
pankso@3512 1025 echo -n "Removing $2 from : $DB_DIR/blocked... "
pankso@3512 1026 sed -i /"^$2$"/d $DB_DIR/blocked
pankso@3512 1027 sed -i '/^$/d' $DB_DIR/blocked && echo "Done"
pankso@3512 1028 echo -n "Adding $2 to : $DB_DIR/cooklist... "
pankso@3512 1029 echo "$2" >> $DB_DIR/cooklist && echo "Done"
pankso@3512 1030 packages_summary_update
pankso@3512 1031 else
pankso@3512 1032 echo -e "$2 is not in the blocked packages list."
pankso@3512 1033 fi
pankso@3512 1034 blocked_urls
pankso@3512 1035 echo "" ;;
pankso@3512 1036 test-pkgs)
pankso@3537 1037 # Start a test suite on all builded packages.
pankso@3512 1038 test_packages $@ ;;
pankso@3512 1039 test-suite)
pankso@3537 1040 # Start a test suite on all builded package and the wok using
pankso@3512 1041 # the great 'tazwok check'.
pankso@3512 1042 #
pankso@3512 1043 # test_packages > $LOG_DIR/test-suite.log
pankso@3512 1044 # tazwok check >> $LOG_DIR/test-suite.log
pankso@3512 1045 #
pankso@3512 1046 test_packages $@
pankso@3512 1047 script -c "tazwok check" $LOG_DIR/test-suite.log ;;
pankso@3590 1048 mail)
pankso@3590 1049 # Tazbbmail Pythom script wrapper.
pankso@3590 1050 PACKAGE=$2
pankso@3590 1051 tazbbmail $PACKAGE ;;
pankso@3512 1052 clean-up)
pankso@3512 1053 # Remove old packages and generate new packages lists.
pankso@3512 1054 update_wok $@
pankso@3512 1055 clean_up $@
pankso@3512 1056 packages_summary_update
pankso@3512 1057 [ "$2" != "--dry-run" ] && tazwok gen-list --text ;;
pankso@3512 1058 clean-log)
pankso@3512 1059 logs=`ls $LOG_DIR | wc -l`
pankso@3512 1060 echo -n "Cleaning: $LOG_DIR... "
pankso@3512 1061 rm -rf $LOG_DIR/*
pankso@3512 1062 echo "$logs log removed" ;;
pascal@6111 1063 check-receipt)
pascal@6111 1064 check_variables $2 &&
pascal@6111 1065 check_wanted_version $2 &&
pascal@6111 1066 check_build_depends $2 ""
pascal@6126 1067 exit $? ;;
pascal@4996 1068 check-depends)
pascal@4996 1069 case "$2" in
pascal@4996 1070 wok)
pascal@4996 1071 for pkg in $PACKAGES_REPOSITORY/*.tazpkg ; do
pascal@4996 1072 missing_depends="$(check_depends_pkg $pkg)"
pascal@4996 1073 [ -n "$missing_depends" ] &&
pascal@4996 1074 echo "The package $pkg depends on $missing_depends."
pascal@4996 1075 done ;;
pascal@4996 1076 package)
pascal@4996 1077 pkg=$3
pascal@4996 1078 VERBOSE=$4
pascal@4996 1079 missing_depends="$(check_depends_pkg $pkg)"
pascal@4996 1080 [ -n "$missing_depends" ] &&
pascal@4996 1081 echo "The package $pkg depends on $missing_depends."
pascal@4996 1082 ;;
pascal@4996 1083 file)
pascal@4996 1084 file=3
pascal@4996 1085 VERBOSE=$4
pascal@4996 1086 missing_depends="$(check_depends_this_file $file)"
pascal@4996 1087 [ -n "$missing_depends" ] &&
pascal@4996 1088 echo "The file $file depends on $missing_depends."
pascal@4996 1089 ;;
pascal@4996 1090 *) cat <<EOT
pascal@4996 1091 check-depends wok check every package in wok.
pascal@4996 1092 check-depends package <pkg> check one package.
pascal@4996 1093 check-depends file <filename> check one file only.
pascal@4996 1094 EOT
pascal@4996 1095 ;;
pascal@4996 1096 esac ;;
pankso@3512 1097 *)
pankso@3512 1098 usage ;;
pankso@3512 1099 esac
pankso@3512 1100
pankso@3512 1101 echo "" > $DB_DIR/running
pascal@4996 1102 rm -f $LOCK_FILE /tmp/files.list.tazbb$$
pankso@3512 1103
pascal@6122 1104 exit 0