tazwok annotate tazwok @ rev 431

Typos
author Paul Issott <paul@slitaz.org>
date Mon Mar 07 11:51:44 2011 +0000 (2011-03-07)
parents 8d92c9fbe545
children 98c5ddc23fd6
rev   line source
pankso@7 1 #!/bin/sh
pankso@7 2 # Tazwok - SliTaz source compiler and binary packages generator/cooker.
pankso@7 3 #
MikeDSmith25@82 4 # Tazwok can compile source packages and create binary packages suitable for
MikeDSmith25@82 5 # Tazpkg (Tiny Autonomous zone package manager). You can build individual
MikeDSmith25@82 6 # packages or a list of packages with one command, rebuild the full distro,
pankso@7 7 # generate a packages repository and also list and get info about packages.
pankso@7 8 #
pankso@106 9 # (C) 2007-2009 SliTaz - GNU General Public License.
pankso@7 10 #
pankso@7 11
gokhlayeh@422 12 VERSION=4.2.6
gokhlayeh@186 13 . /usr/lib/slitaz/libtaz
gokhlayeh@186 14 source_lib commons
pankso@7 15
gokhlayeh@186 16 # Use text instead of numbers, don't get $2 here if it's an option.
gokhlayeh@186 17 [ "$2" = "${2#--}" ] && PACKAGE=$2 && LIST=$2 && ARG=$2
gokhlayeh@186 18 COMMAND=$1
pankso@7 19
gokhlayeh@186 20 ########################################################################
gokhlayeh@186 21 # TAZWOK USAGE
gokhlayeh@186 22 ########################
gokhlayeh@186 23 # Print the usage (English).
pankso@7 24
gokhlayeh@237 25 usage()
pankso@7 26 {
pankso@7 27 echo -e "\nSliTaz sources compiler and packages generator - Version: $VERSION\n
pankso@107 28 \033[1mUsage: \033[0m `basename $0` [command] [package|list|category|dir|id] [--option]
pankso@7 29 \033[1mCommands: \033[0m\n
pankso@7 30 usage Print this short usage.
pankso@7 31 stats Print Tazwok statistics from the config file and the wok.
pankso@133 32 edit Edit a package receipt in the current wok.
paul@121 33 build-depends Generate a list of packages to build a wok.
pankso@7 34 list List all packages in the wok tree or by category.
MikeDSmith25@82 35 info Get information about a package in the wok.
gokhlayeh@283 36 report Display commit/cooklist/broken/blocked.
pascal@92 37 check Check every receipt for common errors.
pankso@7 38 check-log Check the process log file of a package.
gokhlayeh@186 39 check-depends* Check every receipt for DEPENDS - doesn't scan ELF files.
erjo@159 40 check-src Check upstream tarball for package in the wok.
pankso@7 41 search Search for a package in the wok by pattern or name.
MikeDSmith25@82 42 compile Configure and build a package using the receipt rules.
pankso@7 43 genpkg Generate a suitable package for Tazpkg with the rules.
pankso@7 44 cook Compile and generate a package directly.
pankso@7 45 cook-list Cook all packages specified in the list by order.
gokhlayeh@186 46 cook-commit Cook all modified receipts.
paul@430 47 cook-all Cook all packages except toolchain.
gokhlayeh@186 48 cook-toolchain Cook the toolchain packages.
gokhlayeh@240 49 gen-cooklist Generate a sorted cooklist using packages or list.
gokhlayeh@186 50 sort-cooklist Sort the cooklist given in argument.
gokhlayeh@186 51 get-src Download the tarball of the package given in argument.
pankso@7 52 clean Clean all generated files in the package tree.
pankso@7 53 new-tree Prepare a new package tree and receipt (--interactive).
gokhlayeh@186 54 gen-list (Re-)Generate a packages list for a repository.
gokhlayeh@240 55 check-list Update packages lists for a repository.
paul@430 56 gen-wok-db (Re-)Generate wok lists with depends and wanted data.
gokhlayeh@240 57 gen-clean-wok Generate a clean wok in a dir.
gokhlayeh@186 58 clean-wok Clean entirely the wok.
paul@430 59 clean-src Remove old/unrelated-to-wok sources.
pankso@107 60 remove Remove a package from the wok.
gokhlayeh@240 61 webserver Enable/disable webserver on localhost.
gokhlayeh@304 62 update-wok Update the wok.
pankso@108 63 maintainers List all maintainers in the wok.
gokhlayeh@281 64 maintained-by List packages maintained by a contributor.
pankso@355 65 tags List all tags used in wok receipts.
pankso@355 66 block Add package from the blocked list to prevent cooking it.
pankso@355 67 unblock Remove package from the blocked list.\n
gokhlayeh@186 68
paul@430 69 You can use `basename $0` command --help to list available options.
gokhlayeh@186 70 \033[1mImportant - *: \033[0m Commands which need a rewrite."
pankso@7 71 }
pankso@7 72
paul@430 73 # This function displays an error message without returning any error code.
paul@430 74 # It also logs the message in source package's warnings.txt; this file can be
gokhlayeh@186 75 # used on an eventual package page on website to display cooking warnings.
gokhlayeh@186 76 tazwok_warning()
pankso@7 77 {
gokhlayeh@186 78 echo -e "tazwok: $1" >&2
gokhlayeh@186 79 echo -e "$1" >> $WOK/${WANTED:-$PACKAGE}/warning.txt
gokhlayeh@186 80 return
pankso@7 81 }
pankso@7 82
gokhlayeh@186 83 ########################################################################
gokhlayeh@186 84 # TAZWOK VARIABLES & INITIAL CONFIGURATION
gokhlayeh@186 85 ########################
gokhlayeh@186 86
gokhlayeh@186 87 get_tazwok_config()
pankso@7 88 {
gokhlayeh@186 89 # Get configuration file.
gokhlayeh@186 90 get_config
gokhlayeh@186 91
gokhlayeh@186 92 # Define & get options.
gokhlayeh@186 93 get_options_list="$get_options_list SLITAZ_DIR SLITAZ_VERSION undigest"
gokhlayeh@186 94 get_options
gokhlayeh@186 95
gokhlayeh@364 96 LOCAL_REPOSITORY=$SLITAZ_DIR/${undigest:-$SLITAZ_VERSION}
gokhlayeh@235 97
gokhlayeh@235 98 if ! [ "$save_dir" ]; then
gokhlayeh@235 99 if [ -f $LOCAL_REPOSITORY/tazwok.conf ] || [ -f $LOCAL_REPOSITORY/slitaz.conf ]; then
gokhlayeh@235 100 save_dir=$LOCAL_REPOSITORY
gokhlayeh@235 101 [ -f $LOCAL_REPOSITORY/slitaz.conf ] && source $LOCAL_REPOSITORY/slitaz.conf
gokhlayeh@235 102 cd $save_dir
gokhlayeh@235 103 get_tazwok_config
gokhlayeh@235 104 unset save_dir
gokhlayeh@235 105 return
gokhlayeh@235 106 fi
gokhlayeh@235 107 fi
gokhlayeh@235 108
gokhlayeh@186 109 # The path to the most important files/dir used by Tazwok.
gokhlayeh@186 110 PACKAGES_REPOSITORY=$LOCAL_REPOSITORY/packages
gokhlayeh@186 111 WOK=$LOCAL_REPOSITORY/wok
gokhlayeh@186 112 INCOMING_REPOSITORY=$LOCAL_REPOSITORY/packages-incoming
gokhlayeh@186 113 SOURCES_REPOSITORY=$LOCAL_REPOSITORY/src
gokhlayeh@186 114 set_common_path
gokhlayeh@186 115
gokhlayeh@186 116 # /!\ This part needs some changes.
paul@430 117 # Basically, get these files from the net if they are missing.
gokhlayeh@186 118 dep_db=$INCOMING_REPOSITORY/wok-depends.txt
gokhlayeh@186 119 wan_db=$INCOMING_REPOSITORY/wok-wanted.txt
gokhlayeh@186 120
gokhlayeh@186 121 # Check commons directories, create them if user is root.
gokhlayeh@186 122 if test $(id -u) = 0 ; then
gokhlayeh@186 123 check_dir $WOK || chmod 777 $WOK
gokhlayeh@304 124 check_dir $LOCAL_REPOSITORY/clean-wok || chmod 777 $LOCAL_REPOSITORY/clean-wok
gokhlayeh@186 125 check_dir $PACKAGES_REPOSITORY
gokhlayeh@186 126 check_dir $SOURCES_REPOSITORY
gokhlayeh@186 127 check_dir $INCOMING_REPOSITORY
gokhlayeh@186 128 check_dir $LOCAL_REPOSITORY/log
gokhlayeh@293 129 [ -f $dep_db ] || touch $dep_db
gokhlayeh@293 130 [ -f $wan_db ] || touch $wan_db
gokhlayeh@293 131 [ -f $PACKAGES_REPOSITORY/cookorder.txt ] || touch $PACKAGES_REPOSITORY/cookorder.txt
gokhlayeh@293 132 for file in broken blocked commit incoming cooklist; do
gokhlayeh@293 133 [ ! -f $PACKAGES_REPOSITORY/$file ] && touch $PACKAGES_REPOSITORY/$file
gokhlayeh@293 134 done
gokhlayeh@293 135 touch $SOURCES_REPOSITORY/sources.list
gokhlayeh@186 136 fi
gokhlayeh@235 137
gokhlayeh@186 138 # Limit memory usage.
pascal@386 139 ulimit -v $(awk '/MemTotal|SwapTotal/ { n+=$2 } END { print int((n*80)/100) }' < /proc/meminfo)
gokhlayeh@352 140
gokhlayeh@352 141 # log steps for webserver.
gokhlayeh@352 142 log_step="$LOCAL_REPOSITORY/log/step"
gokhlayeh@352 143 run_on_exit="$run_on_exit
gokhlayeh@352 144 rm -f $LOCAL_REPOSITORY/log/step
gokhlayeh@352 145 rm -f $LOCAL_REPOSITORY/log/package"
pankso@7 146 }
pankso@7 147
gokhlayeh@186 148 # Used in several functions.
gokhlayeh@186 149 set_common_path()
gokhlayeh@186 150 {
gokhlayeh@186 151 # The receipt is used to compile the source code and
gokhlayeh@186 152 # generate suitable packages for Tazpkg.
gokhlayeh@186 153 RECEIPT="$WOK/$PACKAGE/receipt"
gokhlayeh@186 154
gokhlayeh@186 155 # The path to the process log file.
gokhlayeh@186 156 LOG="$WOK/$PACKAGE/process.log"
gokhlayeh@186 157 }
gokhlayeh@186 158
gokhlayeh@186 159 ########################################################################
gokhlayeh@186 160 # TAZWOK CHECK FUNCTIONS
gokhlayeh@186 161 ########################
gokhlayeh@186 162
pankso@7 163 # Check for a package name on cmdline.
pankso@7 164 check_for_package_on_cmdline()
pankso@7 165 {
gokhlayeh@186 166 if [ ! "$PACKAGE" ]; then
gokhlayeh@186 167 echo -e "\nYou must specify a package name on the command line." >&2
gokhlayeh@186 168 echo -e "Example : tazwok $COMMAND package\n" >&2
gokhlayeh@186 169 exit 1
pankso@7 170 fi
pankso@7 171 }
pankso@7 172
pankso@7 173 # Check for the receipt of a package used to cook.
pankso@7 174 check_for_receipt()
pankso@7 175 {
pankso@7 176 if [ ! -f "$RECEIPT" ]; then
gokhlayeh@186 177 echo -e "\nUnable to find the receipt : $RECEIPT\n" >&2
gokhlayeh@186 178 exit 1
pankso@7 179 fi
pankso@7 180 }
pankso@7 181
pankso@7 182 # Check for a specified file list on cmdline.
pankso@7 183 check_for_list()
pankso@7 184 {
gokhlayeh@186 185 if [ ! "$LIST" ]; then
gokhlayeh@186 186 echo -e "\nPlease specify the path to the list of packages to cook.\n" >&2
gokhlayeh@186 187 exit 1
pankso@7 188 fi
gokhlayeh@186 189
MikeDSmith25@82 190 # Check if the list of packages exists.
pankso@7 191 if [ -f "$LIST" ]; then
pankso@7 192 LIST=`cat $LIST`
pankso@7 193 else
gokhlayeh@186 194 echo -e "\nUnable to find $LIST packages list.\n" >&2
gokhlayeh@186 195 exit 1
pankso@7 196 fi
gokhlayeh@186 197
gokhlayeh@186 198 if [ ! "$LIST" ]; then
gokhlayeh@186 199 echo -e "\nList is empty.\n" >&2
gokhlayeh@186 200 exit 1
gokhlayeh@186 201 fi
gokhlayeh@186 202 }
gokhlayeh@186 203
gokhlayeh@204 204 check_for_pkg_in_wok()
gokhlayeh@204 205 {
gokhlayeh@204 206 [ -f $WOK/$PACKAGE/receipt ] && return
gokhlayeh@204 207 if [ "$undigest" ]; then
gokhlayeh@204 208 [ -f "$SLITAZ_VERSION/wok/$PACKAGE/receipt" ] && return 1
gokhlayeh@240 209 grep -q ^$PACKAGE$ $SLITAZ_DIR/$SLITAZ_VERSION/packages/packages.txt && return 1
gokhlayeh@204 210 fi
gokhlayeh@204 211 echo "Can't find $PACKAGE in wok or mirror" >&2
gokhlayeh@204 212 return 2
gokhlayeh@204 213 }
gokhlayeh@186 214
gokhlayeh@186 215 ########################################################################
gokhlayeh@186 216 # TAZWOK CORE FUNCTIONS
gokhlayeh@186 217 ########################
gokhlayeh@186 218
gokhlayeh@186 219 remove_src()
gokhlayeh@186 220 {
gokhlayeh@204 221 [ "$WANTED" ] && return
gokhlayeh@186 222 look_for_cookopt !remove_src && return
gokhlayeh@215 223 if [ ! -d $WOK/$PACKAGE/install ] && [ "$src" ] && [ -d "$src/_pkg" ]; then
gokhlayeh@186 224 check_for_var_modification _pkg src || return
gokhlayeh@215 225 mv "$src/_pkg" $WOK/$PACKAGE/install
gokhlayeh@186 226 fi
gokhlayeh@186 227
paul@430 228 # Don't remove sources if a package uses src variable in its
paul@431 229 # genpkg_rules: it maybe needs something inside.
gokhlayeh@186 230 for i in $PACKAGE $(look_for_rwanted); do
gokhlayeh@186 231 sed -n '/^genpkg_rules\(\)/','/}/'p $WOK/$i/receipt | \
gokhlayeh@195 232 fgrep -q '$src' && tazwok_warning "Sources will not be removed \
paul@431 233 because $i uses \$src in its receipt." && return
gokhlayeh@186 234 done
gokhlayeh@186 235
gokhlayeh@186 236 report step "Removing sources directory"
gokhlayeh@186 237 rm -fr "$src"
gokhlayeh@186 238 report end-step
gokhlayeh@186 239 }
gokhlayeh@186 240
gokhlayeh@186 241 # Check $COOK_OPT; usage : get_cookopt particular_opt
paul@430 242 # Return error if not found
gokhlayeh@186 243 # Return args if the opt is in the format opt=arg1:arg2:etc
gokhlayeh@186 244 look_for_cookopt()
gokhlayeh@186 245 {
gokhlayeh@186 246 for arg in $COOK_OPT; do
gokhlayeh@186 247 case $arg in
gokhlayeh@186 248 $1=*)
gokhlayeh@186 249 arg=${arg#$1=}
gokhlayeh@186 250 while [ "$arg" ]; do
gokhlayeh@186 251 echo "${arg%%:*}"
gokhlayeh@186 252 [ "${arg/:}" = "$arg" ] && return
gokhlayeh@186 253 arg=${arg#*:}
gokhlayeh@186 254 done
gokhlayeh@186 255 ;;
gokhlayeh@186 256 $1)
gokhlayeh@186 257 return
gokhlayeh@186 258 ;;
gokhlayeh@186 259 esac
gokhlayeh@186 260 done
gokhlayeh@186 261 return 1
pankso@7 262 }
pankso@7 263
pankso@7 264 # Check for the wanted package if specified in WANTED
paul@166 265 # receipt variable. Set the $src/$_pkg variable to help compile
paul@166 266 # and generate packages.
pankso@7 267 check_for_wanted()
pankso@7 268 {
gokhlayeh@186 269 if [ "$WANTED" ]; then
gokhlayeh@186 270 report "Checking for the wanted package"
pankso@7 271 if [ ! -d "$WOK/$WANTED" ]; then
gokhlayeh@186 272 report exit "\nWanted package is missing in the work directory.\n"
pankso@7 273 fi
gokhlayeh@186 274
erjo@38 275 # Checking for buildtree of Wanted package
pankso@39 276 if [ ! -d "$WOK/$WANTED/taz" ]; then
erjo@38 277 echo -e "\n\nSource files of wanted package is missing in the work directory."
erjo@38 278 echo -n "Would you like to build the missing package (y/N) ? " ; read anser
erjo@38 279 if [ "$anser" == "y" ]; then
erjo@38 280 tazwok cook $WANTED
erjo@38 281 else
gokhlayeh@186 282 report exit "\nWanted package source tree is missing in the work directory.\n"
erjo@38 283 fi
erjo@38 284 fi
gokhlayeh@186 285 report end-step
gokhlayeh@186 286
pankso@7 287 # Set wanted src path.
gokhlayeh@186 288 set_src_path && set_pkg_path
gokhlayeh@186 289
pascal@178 290 fi
pascal@178 291 }
pascal@178 292
pascal@178 293 # Check for build dependencies, notify user and install if specified.
pascal@178 294 check_for_build_depends()
pascal@178 295 {
gokhlayeh@204 296 [ "$WANTED" ] && return
gokhlayeh@213 297 [ "$CATEGORY" = meta ] && ! fgrep -q compile_rules $RECEIPT && return
gokhlayeh@272 298 [ ! "$BUILD_DEPENDS" ] && ! fgrep -q compile_rules $RECEIPT && return
gokhlayeh@186 299 report step "Looking for build dependencies"
gokhlayeh@186 300
gokhlayeh@186 301 # Keep the list of previously installed build_depends then compare
gokhlayeh@186 302 # it with new build_depends to know what to install and what to
gokhlayeh@186 303 # what to remove.
gokhlayeh@186 304 plan_remove=" $MISSING_PACKAGE $remove_later "
gokhlayeh@186 305 [ ! "${plan_remove// }" ] && unset plan_remove
gokhlayeh@186 306 unset MISSING_PACKAGE remove_later
gokhlayeh@186 307 rwanted=$(look_for_rwanted)
gokhlayeh@186 308
gokhlayeh@215 309 for pkg in $(scan $PACKAGE --look_for=bdep --with_dev | \
gokhlayeh@394 310 grep -v $(for i in $(look_for_rwanted) $PACKAGE; do echo " -e ^$i$"; done))
pascal@178 311 do
gokhlayeh@186 312
gokhlayeh@186 313 # Delay the removing of previous cook depends if they are needed
gokhlayeh@186 314 # for next cook too.
gokhlayeh@186 315 if [ ! -d "$INSTALLED/$pkg" ] ; then
gokhlayeh@186 316 MISSING_PACKAGE="$MISSING_PACKAGE $pkg"
gokhlayeh@186 317 fi
gokhlayeh@186 318 if [ "$plan_remove" != "${plan_remove/ $pkg }" ]; then
gokhlayeh@186 319 plan_remove="${plan_remove/ $pkg / }"
gokhlayeh@186 320 remove_later="$remove_later $pkg"
gokhlayeh@186 321 fi
gokhlayeh@186 322 if grep -q ^$pkg$ $PACKAGES_REPOSITORY/broken; then
gokhlayeh@186 323 broken="$broken$pkg "
pascal@178 324 fi
pascal@178 325 done
gokhlayeh@186 326
gokhlayeh@186 327 # Don't cook if a depend is broken.
gokhlayeh@186 328 if [ "$broken" ]; then
gokhlayeh@186 329 MISSING_PACKAGE=$plan_remove
paul@430 330 echo "Can't cook $PACKAGE because of broken depend(s) : $broken" >&2
gokhlayeh@186 331 unset plan_remove broken
gokhlayeh@186 332
gokhlayeh@186 333 # Set report step to failed.
gokhlayeh@186 334 report_return_code=1
gokhlayeh@186 335 report end-step
gokhlayeh@186 336 return 1
gokhlayeh@186 337 fi
gokhlayeh@186 338 if [ "$MISSING_PACKAGE" ]; then
gokhlayeh@186 339 install_missing()
gokhlayeh@186 340 {
gokhlayeh@186 341 echo "Installing missing packages : $MISSING_PACKAGE"
gokhlayeh@186 342 for pkg in $MISSING_PACKAGE; do
gokhlayeh@186 343 [ -d "$INSTALLED/$pkg" ] || tazpkg get-install $pkg
gokhlayeh@186 344 done
gokhlayeh@186 345 }
gokhlayeh@186 346 if [ "$auto_install" = yes ]; then
gokhlayeh@186 347 install_missing
gokhlayeh@186 348 else
gokhlayeh@186 349 echo "================================================================================"
gokhlayeh@186 350 for pkg in $MISSING_PACKAGE
gokhlayeh@186 351 do
pascal@178 352 echo "Missing : $pkg"
gokhlayeh@186 353 done
gokhlayeh@186 354 echo "================================================================================"
gokhlayeh@186 355 echo "You can continue, exit or install missing dependencies."
gokhlayeh@186 356 echo -n "Install, continue or exit (install/y/N) ? "; read answer
gokhlayeh@186 357 case $answer in
gokhlayeh@186 358 install)
gokhlayeh@186 359 install_missing ;;
gokhlayeh@186 360 y|yes)
gokhlayeh@186 361 unset MISSING_PACKAGE;;
gokhlayeh@186 362 *)
gokhlayeh@186 363 report stop
gokhlayeh@186 364 exit 0 ;;
gokhlayeh@186 365 esac
gokhlayeh@186 366 fi
gokhlayeh@186 367 fi
gokhlayeh@186 368 report end-step
gokhlayeh@186 369 remove_build_depends $plan_remove
gokhlayeh@186 370 unset plan_remove
gokhlayeh@186 371 }
gokhlayeh@186 372
gokhlayeh@186 373 remove_build_depends()
gokhlayeh@186 374 {
gokhlayeh@186 375 [ "$1" ] || return
gokhlayeh@186 376 report step "Removing previous build dependencies"
paul@430 377 echo "Removing these packages : $@"
gokhlayeh@186 378 for pkg in $@; do
gokhlayeh@382 379 [ -f "$INSTALLED/$pkg/receipt" ] && tazpkg remove $pkg --auto
gokhlayeh@186 380 done
gokhlayeh@382 381 cd $PWD
gokhlayeh@186 382 report end-step
gokhlayeh@186 383 }
gokhlayeh@186 384
gokhlayeh@186 385 # Check if we can use the new way to handle tarball
paul@430 386 # or if we keep the previous method by checking for
gokhlayeh@186 387 # _pkg=/src= in receipt and reverse-wanted.
gokhlayeh@186 388 check_for_var_modification()
gokhlayeh@186 389 {
gokhlayeh@186 390 for var in $@; do
gokhlayeh@186 391 for pkg in $PACKAGE $(look_for_wanted) $(look_for_rwanted); do
gokhlayeh@186 392 [ -f $WOK/$pkg/receipt ] || continue
gokhlayeh@195 393 fgrep -q "$var=" $WOK/$pkg/receipt && return 1
pascal@178 394 done
gokhlayeh@186 395 done
gokhlayeh@186 396
gokhlayeh@186 397 # Tweak to make if; then...; fi function working with this one.
gokhlayeh@186 398 echo -n ""
gokhlayeh@186 399 }
gokhlayeh@186 400
gokhlayeh@186 401 set_src_path()
gokhlayeh@186 402 {
gokhlayeh@186 403 if check_for_var_modification src _pkg; then
gokhlayeh@186 404 src=$WOK/${WANTED:-$PACKAGE}/${WANTED:-$PACKAGE}-$VERSION
gokhlayeh@186 405 else
paul@430 406 tazwok_warning "Use original name or tarball root directory because src/_pkg is defined in the receipt (this is no longer needed!)."
gokhlayeh@186 407 src=$WOK/${WANTED:-$PACKAGE}/${SOURCE:-${WANTED:-$PACKAGE}}-$VERSION
pascal@178 408 fi
gokhlayeh@298 409 stuff=$WOK/$PACKAGE/stuff
gokhlayeh@298 410 [ "$WANTED" ] && wanted_stuff=$WOK/$WANTED/stuff
pascal@178 411 }
pascal@178 412
gokhlayeh@186 413 set_pkg_path()
gokhlayeh@186 414 {
slaxemulator@269 415 if [ -d $WOK/${WANTED:-$PACKAGE}/install ] ; then
gokhlayeh@186 416 _pkg=$WOK/${WANTED:-$PACKAGE}/install
gokhlayeh@186 417 else
pankso@7 418 _pkg=$src/_pkg
pankso@7 419 fi
pankso@7 420 }
pankso@7 421
gokhlayeh@186 422 # Output $VERSION-$EXTRAVERSION using packages.txt
gokhlayeh@186 423 get_pkg_version()
gokhlayeh@186 424 {
gokhlayeh@186 425 [ "$PACKAGE" ] || return
gokhlayeh@204 426 grep -m1 -A1 -sh ^$PACKAGE$ $1/packages.txt | tail -1 | sed 's/ *//'
gokhlayeh@186 427 }
erjo@38 428
gokhlayeh@186 429 remove_previous_package()
pankso@18 430 {
gokhlayeh@186 431 [ "$prev_VERSION" ] || return
gokhlayeh@186 432 if [ "$VERSION$EXTRAVERSION" != "$prev_VERSION" ]; then
gokhlayeh@186 433 rm -f $1/$PACKAGE-$prev_VERSION.tazpkg
gokhlayeh@186 434 fi
gokhlayeh@382 435 return 0
gokhlayeh@186 436 }
gokhlayeh@186 437
gokhlayeh@186 438 # Check for src tarball and wget if needed.
gokhlayeh@186 439 check_for_tarball()
gokhlayeh@186 440 {
gokhlayeh@258 441 [ "$WGET_URL" ] || return 0
gokhlayeh@364 442 look_for_cookopt !unpack && nounpack=yes
gokhlayeh@290 443 report step "Checking for source tarball: $PACKAGE"
slaxemulator@326 444 local repack_src=$repack_src TARBALL=$TARBALL
gokhlayeh@266 445 if [ "$repack_src" = yes ] && look_for_cookopt !repack_src; then
gokhlayeh@266 446 repack_src=no
gokhlayeh@266 447 fi
gokhlayeh@266 448 if [ "$target" ]; then
gokhlayeh@266 449 src="$target"
gokhlayeh@266 450 else
gokhlayeh@266 451 set_src_path
gokhlayeh@266 452 fi
gokhlayeh@266 453 tmp_src=$tmp/tarball-$$
gokhlayeh@253 454 if [ ! -f "$SOURCES_REPOSITORY/$TARBALL" ] && \
gokhlayeh@253 455 [ ! -f "$SOURCES_REPOSITORY/${SOURCE:-$PACKAGE}-$VERSION.tar.lzma" ] ; then
gokhlayeh@253 456 cd $SOURCES_REPOSITORY
gokhlayeh@266 457 if [ "$SOURCE" ]; then
gokhlayeh@266 458 alt_url="http://mirror.slitaz.org/sources/packages/${SOURCE:0:1}/$SOURCE-$VERSION.tar.lzma"
gokhlayeh@266 459 else
gokhlayeh@266 460 alt_url="http://mirror.slitaz.org/sources/packages/${PACKAGE:0:1}/$PACKAGE-$VERSION.tar.lzma"
pankso@18 461 fi
gokhlayeh@420 462 download $WGET_URL $alt_url http://mirror.slitaz.org/sources/packages/${TARBALL:0:1}/$TARBALL
gokhlayeh@266 463 unset alt_url
gokhlayeh@253 464 if [ ! -f "$SOURCES_REPOSITORY/$TARBALL" ] && \
gokhlayeh@266 465 [ ! -f "$SOURCES_REPOSITORY/${SOURCE:-$PACKAGE}-$VERSION.tar.lzma" ] && \
gokhlayeh@266 466 [ ! -d $tmp_src ]; then
gokhlayeh@253 467 echo -e "\nDownload failed, exiting. Please check WGET_URL variable.\n" >&2
gokhlayeh@253 468 report end-step
gokhlayeh@253 469 return 1
gokhlayeh@253 470 fi
slaxemulator@232 471 fi
gokhlayeh@253 472 report end-step
gokhlayeh@364 473 if { [ -f "$SOURCES_REPOSITORY/${SOURCE:-$PACKAGE}-$VERSION.tar.lzma" ] && [ "$nounpack" ] ; } || \
gokhlayeh@364 474 { [ -f "$SOURCES_REPOSITORY/$TARBALL" ] && [ "$repack_src" != yes ] && [ "$nounpack" ] ; }; then
gokhlayeh@266 475 [ -d "$tmp_src" ] && rm -r $tmp_src
gokhlayeh@364 476 return 0
slaxemulator@232 477 fi
slaxemulator@232 478
slaxemulator@232 479 # Untaring source if necessary. We don't need to extract source if
slaxemulator@232 480 # the package is built with a wanted source package.
slaxemulator@232 481 if [ "$WANTED" ]; then
gokhlayeh@266 482 [ -d "$tmp_src" ] && rm -r $tmp_src
slaxemulator@232 483 return
slaxemulator@232 484 fi
slaxemulator@232 485
slaxemulator@232 486 report step "Untaring source tarball"
slaxemulator@232 487
slaxemulator@232 488 # Log process.
slaxemulator@232 489 echo "untaring source tarball" >> $LOG
gokhlayeh@266 490
paul@430 491 # If $tmp_src exists, there's already a unpacked tarball in it.
gokhlayeh@266 492 if ! [ -d $tmp_src ]; then
gokhlayeh@266 493 mkdir $tmp_src
gokhlayeh@266 494 if [ -f "$SOURCES_REPOSITORY/${SOURCE:-$PACKAGE}-$VERSION.tar.lzma" ] && [ "$repack_src" = yes ]; then
gokhlayeh@266 495 lzma d $SOURCES_REPOSITORY/${SOURCE:-$PACKAGE}-$VERSION.tar.lzma -so | \
gokhlayeh@266 496 tar xf - -C $tmp_src
gokhlayeh@266 497 repack_src=no
gokhlayeh@266 498 TARBALL=${SOURCE:-$PACKAGE}-$VERSION.tar.lzma
gokhlayeh@266 499 elif [ -f "$SOURCES_REPOSITORY/$TARBALL" ]; then
gokhlayeh@266 500 case "$TARBALL" in
gokhlayeh@266 501 *zip|*xpi) cd $tmp_src && unzip -o $SOURCES_REPOSITORY/$TARBALL ;;
gokhlayeh@266 502 *bz2|*tbz|*gem) tar xjf $SOURCES_REPOSITORY/$TARBALL -C $tmp_src;;
gokhlayeh@266 503 *tar) tar xf $SOURCES_REPOSITORY/$TARBALL -C $tmp_src;;
gokhlayeh@266 504 *lzma|*lz) unlzma -c $SOURCES_REPOSITORY/$TARBALL | tar xf - -C $tmp_src;;
gokhlayeh@266 505 *xz) unxz -c $SOURCES_REPOSITORY/$TARBALL | tar xf - -C $tmp_src;;
gokhlayeh@266 506 *Z|*taz) uncompress -c $SOURCES_REPOSITORY/$TARBALL | tar xf - -C $tmp_src;;
gokhlayeh@266 507 *gz) tar xzf $SOURCES_REPOSITORY/$TARBALL -C $tmp_src;;
gokhlayeh@266 508 *rpm) cd $tmp_src && rpm2cpio $SOURCES_REPOSITORY/$TARBALL | cpio -idm --quiet;;
gokhlayeh@266 509
gokhlayeh@266 510 # It's a plain file or something receipt unpack itself.
gokhlayeh@266 511 *)
gokhlayeh@266 512 mkdir $tmp_src/${SOURCE:-$PACKAGE}-$VERSION
gokhlayeh@266 513 cp $SOURCES_REPOSITORY/$TARBALL $tmp_src/${src##*/}
gokhlayeh@266 514 ;;
gokhlayeh@266 515
gokhlayeh@271 516 esac || { report end-step
gokhlayeh@271 517 rm -f $SOURCES_REPOSITORY/$TARBALL
gokhlayeh@271 518 rm -r $tmp_src
gokhlayeh@271 519 return 1
gokhlayeh@271 520 }
gokhlayeh@266 521 fi
gokhlayeh@266 522
slaxemulator@232 523 # Check if uncompressed tarball is in a root dir or not.
gokhlayeh@266 524 if [ "$(ls -A $tmp_src | wc -l)" -gt 1 ] || [ -f $(echo $tmp_src/*) ]; then
slaxemulator@232 525 if check_for_var_modification src _pkg; then
slaxemulator@232 526 mv $tmp_src $tmp_src-1
slaxemulator@232 527 mkdir $tmp_src
gokhlayeh@233 528 mv $tmp_src-1 $tmp_src/${SOURCE:-$PACKAGE}-$VERSION
slaxemulator@232 529 else
slaxemulator@232 530 mv $tmp_src/* $WOK/$PACKAGE
slaxemulator@232 531 repack_src=no
slaxemulator@232 532 rm -r $tmp_src
paul@430 533 tazwok_warning "Putting all files in $WOK/$PACKAGE; not sure about how to handle this tarball (no root dir)... Please try to remove src/_pkg definition from the receipt if you encounter any problems."
pankso@18 534 fi
slaxemulator@232 535 fi
gokhlayeh@266 536 fi
gokhlayeh@266 537
gokhlayeh@266 538 if [ "$repack_src" = yes ]; then
slaxemulator@232 539 report step "Repacking sources in .tar.lzma format"
gokhlayeh@266 540 [ "$TARBALL" ] && rm -f $SOURCES_REPOSITORY/$TARBALL
gokhlayeh@266 541 TARBALL=${SOURCE:-$PACKAGE}-$VERSION.tar.lzma
slaxemulator@232 542 cd $tmp_src
gokhlayeh@266 543 tar -c * | lzma e $SOURCES_REPOSITORY/$TARBALL -si
gokhlayeh@266 544 fi
slaxemulator@232 545
gokhlayeh@266 546 # Remove previous tarball if no other package needs it. We take care to
paul@430 547 # keep tarball if the same package uses it in the main repository.
gokhlayeh@266 548 if [ "$TARBALL" ]; then
gokhlayeh@266 549 previous_tarball=$(grep ^$PACKAGE:incoming $SOURCES_REPOSITORY/sources.list | cut -f2)
gokhlayeh@266 550 if [ "$previous_tarball" ]; then
gokhlayeh@266 551 sed "/^$PACKAGE:incoming/ s/.*/$PACKAGE:incoming\t$TARBALL/" \
gokhlayeh@266 552 -i $SOURCES_REPOSITORY/sources.list
gokhlayeh@266 553 grep -q $'\t'$previous_tarball$ $SOURCES_REPOSITORY/sources.list || \
gokhlayeh@266 554 rm -f $SOURCES_REPOSITORY/$previous_tarball
gokhlayeh@266 555 else
gokhlayeh@266 556 echo -e "$PACKAGE:incoming\t$TARBALL" >> $SOURCES_REPOSITORY/sources.list
slaxemulator@232 557 fi
slaxemulator@232 558 fi
gokhlayeh@266 559
slaxemulator@232 560 if [ "$nounpack" ]; then
slaxemulator@232 561 [ -d "$tmp_src" ] && rm -r $tmp_src
gokhlayeh@285 562 report end-step
slaxemulator@232 563 return
slaxemulator@232 564 fi
gokhlayeh@285 565 if [ ! -d "$src" ]|| [ "$target" ]; then
gokhlayeh@285 566 # Permissions settings.
gokhlayeh@285 567 chown -R root.root "$tmp_src"
gokhlayeh@285 568 if [ -d "$src" ]; then
gokhlayeh@285 569 mkdir -p $src
gokhlayeh@285 570 for f in $tmp_src/*/*; do
gokhlayeh@285 571 cp -a $f $src || { report end-step; rm -r $tmp_src; return 1; }
gokhlayeh@285 572 done
gokhlayeh@285 573 else
gokhlayeh@285 574 if ! check_for_var_modification src _pkg && ! [ "$target" ]; then
gokhlayeh@285 575 src="${src%/*}/$(ls $tmp_src)"
gokhlayeh@285 576 fi
gokhlayeh@285 577 mv $(echo $tmp_src/*) "$src" || { report end-step; rm -r $tmp_src; return 1; }
gokhlayeh@186 578 fi
gokhlayeh@266 579 rm -r $tmp_src
gokhlayeh@266 580 else
gokhlayeh@266 581 [ -d "$tmp_src" ] && rm -r $tmp_src
gokhlayeh@266 582 echo "There's already something at $src. Abort." >&2
gokhlayeh@186 583 fi
gokhlayeh@285 584 report end-step
gokhlayeh@186 585 }
gokhlayeh@186 586
gokhlayeh@186 587 # Log and execute compile_rules function if it exists, to configure and
gokhlayeh@186 588 # make the package if it exists.
gokhlayeh@186 589 check_for_compile_rules()
gokhlayeh@186 590 {
gokhlayeh@186 591 if grep -q ^compile_rules $RECEIPT; then
gokhlayeh@186 592 echo "executing compile_rules" >> $LOG
gokhlayeh@186 593 report step "Executing compile_rules"
gokhlayeh@186 594 cd $WOK/$PACKAGE
gokhlayeh@186 595 rm -f /tmp/config.site
pascal@385 596 ulimit -d unlimited
pascal@385 597 ulimit -m unlimited
gokhlayeh@186 598
gokhlayeh@186 599 # Free some RAM by cleaning cache if option is enabled.
slaxemulator@200 600 freeram=$(free | fgrep '/+ buffers' | tr -s ' ' | cut -f 4 -d ' ')
gokhlayeh@186 601
gokhlayeh@186 602 # Disable -pipe in CFLAGS/CXXFLAGS if less than 512Mb of free
gokhlayeh@186 603 # RAM are available.
gokhlayeh@195 604 if [ "$freeram" -lt 524288 ] && [ "$CFLAGS" != "${CFLAGS/-pipe}" -o \
gokhlayeh@195 605 "$CXXFLAGS" != "${CXXFLAGS/-pipe}" ]; then
paul@430 606 tazwok_warning "Disabling -pipe compile flag because only ${freeram}b of RAM is available."
gokhlayeh@186 607 CFLAGS="${CFLAGS/-pipe}"
gokhlayeh@186 608 CXXFLAGS="${CXXFLAGS/-pipe}"
gokhlayeh@186 609 fi
gokhlayeh@186 610 unset freeram
gokhlayeh@186 611
paul@430 612 # Set cook environement variables.
gokhlayeh@186 613 [ "$src" ] || set_src_path
gokhlayeh@186 614 [ "$DESTDIR" ] || DESTDIR="$WOK/$PACKAGE/install"
gokhlayeh@186 615 [ "$CONFIG_SITE" ] || CONFIG_SITE=/etc/config.site
gokhlayeh@186 616 export CFLAGS CXXFLAGS MAKEFLAGS DESTDIR BUILD_HOST \
gokhlayeh@186 617 CONFIG_SITE default_prefix \
gokhlayeh@186 618 default_datarootdir default_datadir default_localedir \
gokhlayeh@186 619 default_infodir default_mandir default_build default_host
gokhlayeh@186 620 local LC_ALL=POSIX LANG=POSIX
gokhlayeh@186 621 compile_rules
gokhlayeh@186 622
gokhlayeh@186 623 # Check if config.site has been used.
paul@430 624 # /!\ disabled since it screws the return_code of the step.
gokhlayeh@186 625 #if [ -f /tmp/config.site ]; then
gokhlayeh@186 626 # rm /tmp/config.site
gokhlayeh@186 627 #else
gokhlayeh@186 628 # tazwok_warning "config.site hasn't been used during \
paul@430 629 #the configuration process."
gokhlayeh@186 630 #fi
gokhlayeh@186 631 report end-step
pankso@18 632 fi
pankso@18 633 }
pascal@76 634
paul@430 635 # Check for loop in deps tree. /!\ can be removed.
pascal@76 636 check_for_deps_loop()
pascal@76 637 {
pascal@76 638 local list
pascal@76 639 local pkg
pascal@76 640 local deps
pascal@76 641 pkg=$1
pascal@76 642 shift
pascal@76 643 [ -n "$1" ] || return
pascal@76 644 list=""
gokhlayeh@204 645
paul@430 646 # Filter out already processed deps.
pascal@76 647 for i in $@; do
pascal@76 648 case " $ALL_DEPS" in
pascal@76 649 *\ $i\ *);;
pascal@76 650 *) list="$list $i";;
pascal@76 651 esac
pascal@76 652 done
pascal@76 653 ALL_DEPS="$ALL_DEPS$list "
pascal@76 654 for i in $list; do
pascal@76 655 [ -f $i/receipt ] || continue
pascal@76 656 deps="$(DEPENDS=""; . $i/receipt; echo $DEPENDS)"
pascal@76 657 case " $deps " in
pascal@76 658 *\ $pkg\ *) echo -e "$MSG $i"; MSG="";;
pascal@76 659 *) check_for_deps_loop $pkg $deps;;
pascal@76 660 esac
pascal@76 661 done
pascal@76 662 }
pascal@76 663
gokhlayeh@266 664 # Function used by download().
gokhlayeh@266 665 revert_vcs_failure()
gokhlayeh@266 666 {
gokhlayeh@266 667 cd $SOURCES_REPOSITORY
gokhlayeh@266 668 rm -r $tmp_src
gokhlayeh@266 669 }
gokhlayeh@266 670
erjo@53 671 download()
erjo@53 672 {
gokhlayeh@278 673 if [ "$COMMAND" = get-src ]; then
gokhlayeh@278 674 if [ "${DEPENDS/tar}" != "$DEPENDS" ] || [ "${BUILD_DEPENDS/tar}" != "$BUILD_DEPENDS" ]; then
slaxemulator@287 675 [ -f $INSTALLED/tar/receipt ] || tazpkg get-install tar --forced
pankso@7 676 fi
pankso@7 677 fi
pascal@178 678 for file in $@; do
gokhlayeh@266 679 echo "Downloading from ${file#*|}..."
gokhlayeh@255 680 case "$file" in
gokhlayeh@266 681 git\|*)
gokhlayeh@266 682 file=${file#git|}
gokhlayeh@278 683 [ "$COMMAND" = get-src ] && [ ! -f $INSTALLED/git/receipt ] && tazpkg get-install git --forced
slaxemulator@274 684 if [ -f $INSTALLED/git/receipt ]; then
gokhlayeh@266 685 mkdir $tmp_src
gokhlayeh@266 686 cd $tmp_src
gokhlayeh@266 687 if [ "$BRANCH" ]; then
slaxemulator@426 688 git clone $file ${src##*/} && cd ${src##*/} && \
gokhlayeh@266 689 git checkout $BRANCH && rm -rf .git* && break
gokhlayeh@266 690 else
gokhlayeh@266 691 git clone $file ${src##*/} && rm -rf ${src##*/}/.git* && break
gokhlayeh@266 692 fi
gokhlayeh@266 693 revert_vcs_failure
gokhlayeh@266 694 else
paul@430 695 tazwok_warning "Needs git to download the source tarball from $file, please add it as a build-depend."
gokhlayeh@266 696 continue
gokhlayeh@266 697 fi
gokhlayeh@266 698 ;;
slaxemulator@426 699 bazaar\|*)
slaxemulator@426 700 file=${file#bazaar|}
slaxemulator@426 701 [ "$COMMAND" = get-src ] && [ ! -f $INSTALLED/bazaar/receipt ] && tazpkg get-install bazaar --forced
slaxemulator@426 702 if [ -f $INSTALLED/bazaar/receipt ]; then
slaxemulator@426 703 mkdir $tmp_src
slaxemulator@426 704 cd $tmp_src
slaxemulator@426 705 if [ "$BRANCH" ]; then
slaxemulator@426 706 bzr co $file -r $BRANCH ${src##*/} && rm -rf ${src##*/}/.bzr* && break
slaxemulator@426 707 else
slaxemulator@426 708 bzr co $file ${src##*/} && rm -rf ${src##*/}/.bzr* && break
slaxemulator@426 709 fi
slaxemulator@426 710 revert_vcs_failure
slaxemulator@426 711 else
paul@430 712 tazwok_warning "Needs bazaar to download the source tarball from $file, please add it as a build-depend."
slaxemulator@426 713 continue
slaxemulator@426 714 fi
slaxemulator@426 715 ;;
gokhlayeh@266 716 subversion\|*)
gokhlayeh@266 717 file=${file#subversion|}
gokhlayeh@278 718 [ "$COMMAND" = get-src ] && [ ! -f $INSTALLED/subversion/receipt ] && tazpkg get-install subversion --forced
slaxemulator@274 719 if [ -f $INSTALLED/subversion/receipt ]; then
gokhlayeh@266 720 mkdir $tmp_src
gokhlayeh@266 721 cd $tmp_src
gokhlayeh@266 722 if [ "$BRANCH" ]; then
gokhlayeh@266 723 echo t | svn co $file -r $BRANCH ${src##*/} && rm -rf ${src##*/}/.svn* && break
gokhlayeh@266 724 else
gokhlayeh@266 725 echo t | svn co $file ${src##*/} && rm -rf ${src##*/}/.svn* && break
gokhlayeh@266 726 fi
gokhlayeh@266 727 revert_vcs_failure
gokhlayeh@266 728 else
paul@430 729 tazwok_warning "Needs subversion to download the source tarball from $file, please add it as a build-depend."
gokhlayeh@266 730 continue
gokhlayeh@266 731 fi
gokhlayeh@266 732 ;;
gokhlayeh@266 733 mercurial\|*)
gokhlayeh@266 734 file=${file#mercurial|}
gokhlayeh@278 735 [ "$COMMAND" = get-src ] && [ ! -f $INSTALLED/mercurial/receipt ] && tazpkg get-install mercurial --forced
slaxemulator@274 736 if [ -f $INSTALLED/mercurial/receipt ]; then
gokhlayeh@266 737 mkdir $tmp_src
gokhlayeh@266 738 cd $tmp_src
gokhlayeh@266 739 if [ "$BRANCH" ]; then
gokhlayeh@266 740 hg clone $file --rev $BRANCH ${src##*/} && rm -rf ${src##*/}/.hg* && break
gokhlayeh@266 741 else
gokhlayeh@266 742 hg clone $file ${src##*/} && rm -rf ${src##*/}/.hg* && break
gokhlayeh@266 743 fi
gokhlayeh@266 744 revert_vcs_failure
gokhlayeh@266 745 else
paul@430 746 tazwok_warning "Needs mercurial to download the source tarball from $file, please add it as a build-depend."
gokhlayeh@266 747 continue
gokhlayeh@266 748 fi
gokhlayeh@266 749 ;;
gokhlayeh@266 750 https*)
gokhlayeh@278 751 [ "$COMMAND" = get-src ] && [ ! -f $INSTALLED/wget/receipt ] && tazpkg get-install wget --forced
gokhlayeh@255 752 if [ -d $INSTALLED/wget ]; then
gokhlayeh@266 753 if [ "${WGET_URL%$TARBALL}" = "$WGET_URL" ] && [ "$file" = "$WGET_URL" ]; then
gokhlayeh@266 754 wget -q --no-check-certificate -O $TARBALL $file && break
gokhlayeh@266 755 else
gokhlayeh@290 756 wget -q --no-check-certificate $file && break
gokhlayeh@266 757 fi
gokhlayeh@255 758 else
paul@430 759 tazwok_warning "Needs wget to download the source tarball from $file, please add it as a build-depend."
gokhlayeh@266 760 continue
gokhlayeh@255 761 fi
gokhlayeh@266 762 ;;
gokhlayeh@266 763 http*|ftp*)
gokhlayeh@266 764 # Handle crappy URL.
gokhlayeh@278 765 if [ "$COMMAND" = get-src ]; then
gokhlayeh@278 766 if [ "${DEPENDS/wget}" != "$DEPENDS" ] || [ "${BUILD_DEPENDS/wget}" != "$BUILD_DEPENDS" ]; then
gokhlayeh@278 767 [ -f $INSALLED/wget/receipt ] || tazpkg get-install wget --forced
gokhlayeh@278 768 fi
gokhlayeh@278 769 fi
gokhlayeh@266 770 if [ "${WGET_URL%$TARBALL}" = "$WGET_URL" ] && [ "$file" = "$WGET_URL" ]; then
gokhlayeh@266 771 wget -q -O $TARBALL $file && break
gokhlayeh@266 772 else
gokhlayeh@266 773 wget -q $file && break
gokhlayeh@266 774 fi
gokhlayeh@266 775 ;;
gokhlayeh@255 776 esac
pascal@178 777 done
pankso@7 778 }
pankso@7 779
paul@430 780 # Regenerate every package that wants a PACKAGE compiled.
pascal@156 781 refresh_packages_from_compile()
pascal@156 782 {
paul@430 783 # make tazwok genpkg happy.
pascal@156 784 mkdir $WOK/$PACKAGE/taz
gokhlayeh@204 785
paul@430 786 # Cook rwanted in default or specied order.
gokhlayeh@186 787 genlist=" $(look_for_rwanted | tr '\n' ' ') "
gokhlayeh@186 788 for i in $(look_for_cookopt genpkg | tac); do
gokhlayeh@186 789 [ "${genlist/ $i }" = "$genlist" ] && continue
gokhlayeh@186 790 genlist=" $i${genlist/ $i / }"
pascal@156 791 done
gokhlayeh@215 792 if [ "$genlist" ]; then
gokhlayeh@215 793 local PACKAGE SOURCE VERSION EXTRAVERSION CATEGORY SHORT_DESC \
gokhlayeh@215 794 MAINTAINER WEB_SITE WGET_URL DEPENDS BUILD_DEPENDS WANTED \
gokhlayeh@215 795 PACKED_SIZE UNPACKED_SIZE COOK_OPT PROVIDE CONFIG_FILES TAGS \
gokhlayeh@298 796 src _pkg DESTDIR CONFIG_SITE RECEIPT LOG stuff wanted_stuff
gokhlayeh@215 797 for PACKAGE in $genlist; do
gokhlayeh@215 798 set_common_path
gokhlayeh@215 799 gen_package
gokhlayeh@215 800 done
gokhlayeh@215 801 fi
pascal@156 802 }
pascal@156 803
MikeDSmith25@82 804 # Copy all generic files (locale, pixmaps, .desktop). We use standard paths,
pankso@22 805 # so some packages need to copy these files with the receipt and genpkg_rules.
pankso@22 806 # This function is executed by gen_package when 'tazwok genpkg'.
pankso@22 807 copy_generic_files()
pankso@22 808 {
MikeDSmith25@82 809 # In most cases, locales are in $_pkg/usr/share/locale so we copy files
pankso@22 810 # using generic variables and $LOCALE from Tazwok config file.
gokhlayeh@186 811 if [ "$LOCALE" ]; then
pankso@22 812 if [ -d "$_pkg/usr/share/locale" ]; then
pankso@22 813 for i in $LOCALE
pankso@22 814 do
pankso@37 815 if [ -d "$_pkg/usr/share/locale/$i" ]; then
pankso@37 816 mkdir -p $fs/usr/share/locale
pankso@37 817 cp -a $_pkg/usr/share/locale/$i $fs/usr/share/locale
pankso@37 818 fi
pankso@22 819 done
pankso@22 820 fi
pankso@22 821 fi
gokhlayeh@186 822
pankso@133 823 # Pixmaps (PNG or/and XPM only). Some icons/images can be added through
MikeDSmith25@82 824 # genpkg_rules and generic copy can be disabled with GENERIC_PIXMAPS="no"
pankso@31 825 # in pkg receipt.
gokhlayeh@186 826 if [ "$GENERIC_PIXMAPS" != "no" ]; then
pankso@22 827 if [ -d "$_pkg/usr/share/pixmaps" ]; then
pankso@27 828 mkdir -p $fs/usr/share/pixmaps
pankso@31 829 cp -a $_pkg/usr/share/pixmaps/$PACKAGE.png \
pankso@31 830 $fs/usr/share/pixmaps 2>/dev/null
pankso@31 831 cp -a $_pkg/usr/share/pixmaps/$PACKAGE.xpm \
pankso@22 832 $fs/usr/share/pixmaps 2>/dev/null
pankso@23 833 fi
gokhlayeh@186 834
MikeDSmith25@82 835 # Custom or homemade PNG pixmap can be in stuff.
pankso@23 836 if [ -f "stuff/$PACKAGE.png" ]; then
pankso@27 837 mkdir -p $fs/usr/share/pixmaps
pankso@23 838 cp -a stuff/$PACKAGE.png $fs/usr/share/pixmaps
pankso@22 839 fi
pankso@22 840 fi
gokhlayeh@186 841
pankso@22 842 # Desktop entry (.desktop).
pankso@22 843 if [ -d "$_pkg/usr/share/applications" ]; then
pankso@22 844 cp -a $_pkg/usr/share/applications $fs/usr/share
pankso@23 845 fi
gokhlayeh@186 846
MikeDSmith25@82 847 # Homemade desktop file(s) can be in stuff.
pankso@34 848 if [ -d "stuff/applications" ]; then
pankso@42 849 mkdir -p $fs/usr/share
pankso@42 850 cp -a stuff/applications $fs/usr/share
pankso@34 851 fi
pankso@34 852 if [ -f "stuff/$PACKAGE.desktop" ]; then
pankso@42 853 mkdir -p $fs/usr/share/applications
pankso@42 854 cp -a stuff/$PACKAGE.desktop $fs/usr/share/applications
pankso@22 855 fi
pankso@22 856 }
pankso@22 857
pankso@25 858 # Find and strip : --strip-all (-s) or --strip-debug on static libs.
pankso@25 859 strip_package()
pankso@25 860 {
gokhlayeh@186 861 report step "Executing strip on all files"
gokhlayeh@186 862
pankso@25 863 # Binaries.
pankso@25 864 for dir in $fs/bin $fs/sbin $fs/usr/bin $fs/usr/sbin $fs/usr/games
pankso@25 865 do
pankso@25 866 if [ -d "$dir" ]; then
pankso@25 867 find $dir -type f -exec strip -s '{}' 2>/dev/null \;
pankso@25 868 fi
pankso@25 869 done
gokhlayeh@186 870
pankso@25 871 # Libraries.
pankso@25 872 find $fs -name "*.so*" -exec strip -s '{}' 2>/dev/null \;
pankso@25 873 find $fs -name "*.a" -exec strip --strip-debug '{}' 2>/dev/null \;
gokhlayeh@186 874 report end-step
pankso@25 875 }
pankso@25 876
paul@430 877 # Remove .pyc and .pyo files from packages.
slaxemulator@183 878 py_compiled_files_remove()
slaxemulator@183 879 {
gokhlayeh@186 880 report step "Removing all .pyc and .pyo files from package ..."
slaxemulator@183 881 find $fs -type f -name "*.pyc" -delete 2>/dev/null
slaxemulator@183 882 find $fs -type f -name "*.pyo" -delete 2>/dev/null
gokhlayeh@186 883 report end-step
slaxemulator@183 884 }
slaxemulator@183 885
pankso@135 886 # Check FSH in a slitaz package (Path: /:/usr)
pankso@135 887 check_fsh()
pankso@135 888 {
pankso@135 889 cd $WOK/$PACKAGE/taz/*/fs
pascal@428 890 if [ -z "$(find * ! -type d)" ] && [ "$CATEGORY" != meta ]; then
gokhlayeh@381 891 echo "$PACKAGE fs is empty." >&2
gokhlayeh@381 892 cd $WOK/$PACKAGE && rm -rf taz
gokhlayeh@381 893 return 1
gokhlayeh@381 894 fi
pascal@149 895 [ -n "$FSH" ] || FSH="bin boot dev etc home init lib media mnt proc \
pascal@149 896 root sbin share sys tmp usr var vz usr/bin usr/games usr/include usr/lib \
pascal@149 897 usr/local usr/sbin usr/share usr/src"
pankso@135 898 for i in `ls -d * usr/* 2>/dev/null`
pankso@135 899 do
gokhlayeh@195 900 if ! echo $FSH | fgrep -q $i; then
gokhlayeh@186 901 echo "Wrong path: /$i" >&2
pankso@135 902 error=1
pankso@135 903 fi
pankso@135 904 done
pankso@135 905 if [ "$error" = "1" ]; then
pankso@135 906 cat << _EOT_
pankso@135 907
paul@155 908 Package will install files in a non standard directory and won't be generated.
paul@154 909 You may have a wrong copy path in genpkg_rules or need to add some options to
pankso@135 910 configure in compile_rules. Some valid options for SliTaz (Linux FSH):
pankso@135 911
pankso@135 912 --prefix=/usr
pankso@135 913 --sysconfdir=/etc
pankso@135 914 --libexecdir=/usr/lib/(pkgname)
pankso@135 915 --localstatedir=/var
pankso@135 916 --mandir=/usr/share/man
pankso@135 917 --infodir=/usr/share/info
pankso@135 918
paul@152 919 For more information please read SliTaz docs and run: ./configure --help
pankso@135 920 ================================================================================
pankso@135 921 $PACKAGE package generation aborted.
pankso@135 922
pankso@135 923 _EOT_
gokhlayeh@186 924
pankso@135 925 # Dont generate a corrupted package.
pankso@137 926 cd $WOK/$PACKAGE && rm -rf taz
gokhlayeh@381 927 return 1
pankso@135 928 fi
gokhlayeh@381 929 return 0
gokhlayeh@186 930 }
gokhlayeh@186 931
gokhlayeh@186 932 gen_cookmd5()
gokhlayeh@186 933 {
gokhlayeh@186 934 # md5sum of cooking stuff make tazwok able to check for changes
gokhlayeh@186 935 # without hg.
gokhlayeh@186 936 cd $WOK/$PACKAGE
gokhlayeh@186 937 md5sum receipt > md5
gokhlayeh@186 938 [ -f description.txt ] && md5sum description.txt >> md5
gokhlayeh@186 939 if [ -d stuff ]; then
gokhlayeh@186 940 find stuff | while read file; do
gokhlayeh@186 941 md5sum $file >> md5
gokhlayeh@186 942 done
gokhlayeh@186 943 fi
pankso@135 944 }
pankso@135 945
gokhlayeh@381 946 set_pkg_broken()
gokhlayeh@381 947 {
gokhlayeh@381 948 if ! grep -q ^$PACKAGE$ $PACKAGES_REPOSITORY/broken; then
gokhlayeh@381 949 echo $PACKAGE >> $PACKAGES_REPOSITORY/broken
gokhlayeh@381 950 fi
gokhlayeh@381 951
paul@430 952 # Remove pkg from cooklist to avoid re-cook it if no changes happen
gokhlayeh@381 953 # in the cook stuff.
gokhlayeh@381 954 sed "/^$PACKAGE$/d" -i $PACKAGES_REPOSITORY/cooklist
gokhlayeh@383 955 sed "/^$PACKAGE$/d" -i $PACKAGES_REPOSITORY/commit
gokhlayeh@381 956
gokhlayeh@381 957 gen_cookmd5
gokhlayeh@381 958
paul@430 959 # Return 1 to make report know that its mother-function failed.
gokhlayeh@381 960 return 1
gokhlayeh@381 961 }
gokhlayeh@381 962
MikeDSmith25@82 963 # Create a package tree and build the gziped cpio archive
pankso@7 964 # to make a SliTaz (.tazpkg) package.
pankso@7 965 gen_package()
pankso@7 966 {
pankso@7 967 check_root
pankso@7 968 check_for_package_on_cmdline
pankso@7 969 check_for_receipt
gokhlayeh@381 970 source_receipt
gokhlayeh@186 971
pascal@86 972 # May compute VERSION
pascal@86 973 if grep -q ^get_version $RECEIPT; then
pascal@86 974 get_version
pascal@86 975 fi
pankso@7 976 check_for_wanted
pankso@7 977 cd $WOK/$PACKAGE
gokhlayeh@186 978
pankso@7 979 # Remove old Tazwok package files.
gokhlayeh@186 980 [ -d "taz" ] && rm -rf taz
gokhlayeh@186 981
MikeDSmith25@82 982 # Create the package tree and set useful variables.
gokhlayeh@266 983 fs=$WOK/$PACKAGE/taz/$PACKAGE-$VERSION/fs
gokhlayeh@381 984 mkdir -p $fs
gokhlayeh@186 985
MikeDSmith25@82 986 # Set $src for standard package and $_pkg variables.
gokhlayeh@302 987 set_src_path
gokhlayeh@302 988 set_pkg_path
gokhlayeh@186 989
pankso@135 990 # Execute genpkg_rules, check package and copy generic files to build
pankso@135 991 # the package.
gokhlayeh@186 992 report step "Building $PACKAGE with the receipt"
gokhlayeh@186 993 report open-bloc
gokhlayeh@381 994 if look_for_cookopt !fs; then
gokhlayeh@381 995 :
gokhlayeh@381 996 elif grep -q ^genpkg_rules $RECEIPT; then
gokhlayeh@186 997
pankso@7 998 # Log process.
pankso@7 999 echo "executing genpkg_rules" >> $LOG
gokhlayeh@186 1000 report step "Executing genpkg_rules"
gokhlayeh@381 1001 ( set -e; genpkg_rules ) || { set_pkg_broken; report close-bloc; return 1; }
gokhlayeh@381 1002 check_fsh || { set_pkg_broken; report close-bloc; return 1; }
gokhlayeh@381 1003 cd $WOK/$PACKAGE
gokhlayeh@186 1004 report end-step
gokhlayeh@381 1005
pankso@133 1006 # Skip generic files for packages with a WANTED variable
paul@430 1007 # (dev and split pkgs).
gokhlayeh@186 1008 if [ ! "$WANTED" ]; then
pankso@24 1009 copy_generic_files
pankso@24 1010 fi
gokhlayeh@204 1011 look_for_cookopt !strip || strip_package
slaxemulator@183 1012 py_compiled_files_remove
pankso@7 1013 else
gokhlayeh@186 1014 echo "No package rules to gen $PACKAGE..." >&2
gokhlayeh@381 1015 set_pkg_broken
gokhlayeh@381 1016 report close-bloc
gokhlayeh@381 1017 return 1
pankso@7 1018 fi
gokhlayeh@186 1019
paul@154 1020 # Copy the receipt and description (if exists) into the binary package tree.
pankso@7 1021 cd $WOK/$PACKAGE
gokhlayeh@186 1022 report step "Copying the receipt"
pankso@7 1023 cp receipt taz/$PACKAGE-$VERSION
gokhlayeh@186 1024 report end-step
pascal@89 1025 if grep -q ^get_version $RECEIPT; then
gokhlayeh@186 1026 report step "Updating version in receipt"
pascal@89 1027 sed -i "s/^VERSION=.*/VERSION=\"$VERSION\"/" \
pascal@89 1028 taz/$PACKAGE-$VERSION/receipt
gokhlayeh@186 1029 report end-step
pascal@89 1030 fi
pankso@7 1031 if [ -f "description.txt" ]; then
gokhlayeh@186 1032 report step "Copying the description file"
pankso@7 1033 cp description.txt taz/$PACKAGE-$VERSION
gokhlayeh@186 1034 report end-step
pankso@7 1035 fi
gokhlayeh@186 1036
gokhlayeh@186 1037 # Generate md5 of cooking stuff to look for commit later.
gokhlayeh@186 1038 gen_cookmd5
gokhlayeh@186 1039 echo -e "\n# md5sum of cooking stuff :" >> taz/$PACKAGE-$VERSION/receipt
gokhlayeh@186 1040 cat md5 | sed 's/^/# /' >> taz/$PACKAGE-$VERSION/receipt
gokhlayeh@186 1041
MikeDSmith25@82 1042 # Create the files.list by redirecting find output.
gokhlayeh@186 1043 report step "Creating the list of files"
pascal@15 1044 cd taz/$PACKAGE-$VERSION
pascal@13 1045 LAST_FILE=""
gokhlayeh@195 1046 { find fs -print; echo; } | while read file; do
gokhlayeh@186 1047 if [ "$LAST_FILE" ]; then
pascal@15 1048 case "$file" in
pascal@13 1049 $LAST_FILE/*)
pankso@133 1050 case "$(ls -ld "$LAST_FILE")" in
pascal@15 1051 drwxr-xr-x\ *\ root\ *\ root\ *);;
pascal@15 1052 *) echo ${LAST_FILE#fs};;
pascal@13 1053 esac;;
pascal@15 1054 *) echo ${LAST_FILE#fs};;
pascal@13 1055 esac
pascal@13 1056 fi
pascal@15 1057 LAST_FILE="$file"
pascal@15 1058 done > files.list
gokhlayeh@186 1059
gokhlayeh@186 1060 # Next, check if something has changed in lib files.
gokhlayeh@215 1061 if fgrep -q '.so' files.list; then
gokhlayeh@215 1062 for rep in $INCOMING_REPOSITORY $PACKAGES_REPOSITORY \
gokhlayeh@295 1063 $([ "$undigest" ] && echo $SLITAZ_DIR/$SLITAZ_VERSION/packages-incoming && \
gokhlayeh@215 1064 echo $SLITAZ_DIR/$SLITAZ_VERSION/packages); do
gokhlayeh@215 1065 prev_VERSION=$(get_pkg_version $rep)
gokhlayeh@215 1066 [ "$prev_VERSION" ] && pkg_file=$rep/$PACKAGE-$prev_VERSION.tazpkg && break
gokhlayeh@215 1067 done
gokhlayeh@215 1068 if [ "$pkg_file" ]; then
paul@430 1069 report step "Looking for major/minor updates in libraries"
gokhlayeh@215 1070 get_pkg_files $pkg_file
gokhlayeh@215 1071 cd $WOK/$PACKAGE/taz/$PACKAGE-$VERSION
gokhlayeh@215 1072 fgrep ".so" files.list | egrep -v "[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*" | \
gokhlayeh@215 1073 while read lib; do
gokhlayeh@215 1074 fgrep -q "$lib" $pkg_files_dir/files.list && continue
gokhlayeh@215 1075 echo "A minor/major update in libraries is detected, planning re-cook of reverse-depends of $PACKAGE."
gokhlayeh@215 1076 for rdep in $(scan $PACKAGE --look_for=rdep | use_wanted); do
gokhlayeh@215 1077 [ "$rdep" = "${WANTED:-$PACKAGE}" ] && continue
gokhlayeh@215 1078 grep -q ^$rdep$ $PACKAGES_REPOSITORY/blocked \
gokhlayeh@215 1079 $PACKAGES_REPOSITORY/cooklist && continue
gokhlayeh@215 1080 echo $rdep >> $PACKAGES_REPOSITORY/cooklist
gokhlayeh@215 1081 done
gokhlayeh@215 1082 regen_cooklist=yes
gokhlayeh@215 1083 break
gokhlayeh@215 1084 done
gokhlayeh@215 1085 rm -r $pkg_files_dir
gokhlayeh@295 1086 unset pkg_file
gokhlayeh@295 1087 report end-step
gokhlayeh@295 1088 fi
gokhlayeh@295 1089 fi
gokhlayeh@186 1090 if [ ! "$EXTRAVERSION" ]; then
pascal@84 1091 case "$PACKAGE" in
pascal@84 1092 linux*);;
pascal@85 1093 *) EXTRAVERSION="$(grep '/lib/modules/.*-slitaz/' files.list |\
pascal@84 1094 head -1 | sed 's|/lib/modules/\(.*\)-slitaz/.*|_\1|')";;
pascal@84 1095 esac
pascal@84 1096 fi
gokhlayeh@186 1097 rm -f $INCOMING_REPOSITORY/$PACKAGE-$VERSION$EXTRAVERSION.tazpkg 2> /dev/null
gokhlayeh@186 1098 report step "Creating md5sum of files"
pascal@70 1099 while read file; do
pascal@71 1100 [ -L "fs$file" ] && continue
pascal@71 1101 [ -f "fs$file" ] || continue
pascal@71 1102 md5sum "fs$file" | sed 's/ fs/ /'
pascal@70 1103 done < files.list > md5sum
gokhlayeh@204 1104 report end-step
pascal@84 1105 UNPACKED_SIZE=$(du -chs fs receipt files.list md5sum description.txt \
pascal@84 1106 2> /dev/null | awk '{ sz=$1 } END { print sz }')
gokhlayeh@186 1107
pankso@7 1108 # Build cpio archives. Find, cpio and gzip the fs, finish by
pankso@7 1109 # removing the fs tree.
paul@430 1110 # Don't log this because compression always outputs error messages.
pascal@150 1111 find fs -print | cpio -o -H newc | case "$PACKAGE-$COMPRESSION" in
pascal@150 1112 tazpkg-lzma) gzip > fs.cpio.gz;;
pascal@150 1113 *-lzma) lzma e fs.cpio.lzma -si;;
pascal@150 1114 *) gzip > fs.cpio.gz;;
pascal@150 1115 esac && rm -rf fs
pascal@150 1116 PACKED_SIZE=$(du -chs fs.cpio.* receipt files.list md5sum \
pascal@84 1117 description.txt 2> /dev/null | awk '{ sz=$1 } END { print sz }')
gokhlayeh@186 1118 report step "Updating receipt sizes"
pascal@138 1119 sed -i '/^PACKED_SIZE/d' receipt
pascal@138 1120 sed -i '/^UNPACKED_SIZE/d' receipt
pascal@59 1121 sed -i "s/^PACKAGE=/PACKED_SIZE=\"$PACKED_SIZE\"\nUNPACKED_SIZE=\"$UNPACKED_SIZE\"\nPACKAGE=/" receipt
pascal@86 1122 sed -i "s/^VERSION=$/VERSION=\"$VERSION\"/" receipt
gokhlayeh@212 1123 report end-step
gokhlayeh@212 1124 if [ "$EXTRAVERSION" ]; then
gokhlayeh@186 1125 report step "Updating receipt EXTRAVERSION"
pascal@72 1126 sed -i s/^EXTRAVERSION.*$// receipt
pascal@72 1127 sed -i "s/^VERSION=/EXTRAVERSION=\"$EXTRAVERSION\"\nVERSION=/" receipt
pascal@72 1128 fi
gokhlayeh@186 1129 prev_VERSION=$(get_pkg_version $INCOMING_REPOSITORY)
gokhlayeh@186 1130 remove_previous_package $INCOMING_REPOSITORY
gokhlayeh@186 1131 report step "Creating full cpio archive"
gokhlayeh@186 1132 find . -print | cpio -o -H newc > $INCOMING_REPOSITORY/$PACKAGE-$VERSION$EXTRAVERSION.tazpkg
gokhlayeh@186 1133
paul@154 1134 # Restore package tree in case we want to browse it.
gokhlayeh@186 1135 report step "Restoring original package tree"
gokhlayeh@195 1136 { zcat fs.cpio.gz 2> /dev/null || unlzma -c fs.cpio.lzma; } | cpio --quiet -id
pascal@150 1137 rm fs.cpio.* && cd ..
gokhlayeh@383 1138
gokhlayeh@383 1139 # Recook of reverse-depends if package was broken.
gokhlayeh@383 1140 if grep -q "^$PACKAGE$" $PACKAGES_REPOSITORY/broken; then
paul@430 1141 report step "Planning a re-try cook of reverse depends"
gokhlayeh@383 1142 sed "/^$PACKAGE$/d" -i $PACKAGES_REPOSITORY/broken
gokhlayeh@383 1143 for rdep in $(look_for_rdep); do
gokhlayeh@383 1144 grep -q "^$rdep$" $PACKAGES_REPOSITORY/broken || continue
gokhlayeh@383 1145 grep -q "^$rdep$" $PACKAGES_REPOSITORY/cooklist && continue
gokhlayeh@383 1146 echo "Adding $rdep to the cooklist"
gokhlayeh@383 1147 echo $rdep >> $PACKAGES_REPOSITORY/cooklist
gokhlayeh@383 1148 regen_cooklist=t
gokhlayeh@383 1149 done
gokhlayeh@383 1150 report end-step
gokhlayeh@383 1151 fi
gokhlayeh@383 1152 sed "/^$PACKAGE$/d" -i $PACKAGES_REPOSITORY/commit
gokhlayeh@383 1153 sed "/^$PACKAGE$/d" -i $PACKAGES_REPOSITORY/cooklist
gokhlayeh@186 1154
pankso@7 1155 # Log process.
pascal@69 1156 echo "$PACKAGE-$VERSION$EXTRAVERSION.tazpkg (done)" >> $LOG
gokhlayeh@186 1157 report close-bloc
pascal@68 1158 echo "Package $PACKAGE ($VERSION$EXTRAVERSION) generated."
gokhlayeh@186 1159 echo "Size : `du -sh $INCOMING_REPOSITORY/$PACKAGE-$VERSION$EXTRAVERSION.tazpkg`"
pankso@7 1160 echo ""
pankso@7 1161 }
pankso@7 1162
gokhlayeh@186 1163 ########################################################################
gokhlayeh@186 1164 # This section contains functions used by several other functions
paul@430 1165 # below.
gokhlayeh@186 1166 ########################
gokhlayeh@186 1167
gokhlayeh@186 1168 # Look for receipt/files.list in wok. If they can't be found, get them
gokhlayeh@186 1169 # from package. Accept one argument : absolute path to package.
gokhlayeh@186 1170 get_pkg_files()
pankso@28 1171 {
gokhlayeh@186 1172 pkg_files_dir=$tmp/$(basename ${1%.tazpkg})
gokhlayeh@186 1173 mkdir -p $pkg_files_dir && \
gokhlayeh@186 1174 cd $pkg_files_dir && \
gokhlayeh@186 1175 cpio --quiet -idm receipt < $1 && \
gokhlayeh@186 1176 cpio --quiet -idm files.list < $1
gokhlayeh@186 1177 }
gokhlayeh@170 1178
gokhlayeh@186 1179 ########################################################################
gokhlayeh@204 1180 # This section contains functions to generate packages databases.
gokhlayeh@186 1181 ########################
gokhlayeh@186 1182
gokhlayeh@186 1183
gokhlayeh@186 1184 gen_packages_db()
gokhlayeh@186 1185 {
gokhlayeh@186 1186 # pkg_repository can be $PACKAGES_REPOSITORY or $INCOMING_REPOSITORY.
gokhlayeh@204 1187 [ "$pkg_repository" ] || pkg_repository=$PACKAGES_REPOSITORY
gokhlayeh@186 1188 cd $pkg_repository
gokhlayeh@204 1189 report step "Generating packages lists: $pkg_repository"
gokhlayeh@204 1190 report open-bloc
gokhlayeh@204 1191 report step "Removing old files"
gokhlayeh@204 1192 for file in files.list.lzma packages.list packages.txt \
gokhlayeh@204 1193 packages.desc packages.equiv packages.md5; do
gokhlayeh@204 1194 [ -f $file ] && rm $file
gokhlayeh@204 1195 done
gokhlayeh@204 1196 touch files.list
gokhlayeh@204 1197
gokhlayeh@186 1198 packages_db_start
gokhlayeh@186 1199 unset RECEIPT
paul@430 1200 report step "Reading data from all packages"
gokhlayeh@195 1201 for pkg in $(echo $pkg_repository/*.tazpkg | fgrep -v '*'); do
gokhlayeh@186 1202 get_packages_info
gokhlayeh@186 1203 done
gokhlayeh@186 1204 report end-step
gokhlayeh@186 1205 packages_db_end
gokhlayeh@204 1206 report close-bloc
gokhlayeh@186 1207 }
gokhlayeh@186 1208
gokhlayeh@186 1209 update_packages_db()
gokhlayeh@186 1210 {
gokhlayeh@204 1211 [ "$pkg_repository" ] || pkg_repository=$PACKAGES_REPOSITORY
gokhlayeh@186 1212 cd $pkg_repository
gokhlayeh@204 1213 for file in packages.list packages.equiv packages.md5 packages.desc \
gokhlayeh@204 1214 packages.txt; do
gokhlayeh@186 1215 if [ ! -f "$file" ]; then
gokhlayeh@204 1216 gen_packages_db
gokhlayeh@186 1217 return
gokhlayeh@170 1218 fi
gokhlayeh@170 1219 done
gokhlayeh@186 1220 if [ -f files.list.lzma ]; then
gokhlayeh@186 1221 lzma d files.list.lzma files.list
gokhlayeh@186 1222 else
gokhlayeh@204 1223 gen_packages_db
gokhlayeh@414 1224 return
gokhlayeh@186 1225 fi
gokhlayeh@204 1226 report step "Updating packages lists: $pkg_repository"
gokhlayeh@186 1227 packages_db_start
gokhlayeh@412 1228
gokhlayeh@186 1229 # Look for removed/update packages.
gokhlayeh@412 1230 touch stamp -r packages.list
gokhlayeh@186 1231 for PACKAGE in $(grep ^[0-9,a-z,A-Z] packages.txt); do
gokhlayeh@202 1232 pkg="$pkg_repository/$(grep -m1 ^$PACKAGE- packages.list).tazpkg"
gokhlayeh@195 1233 if ! [ -f "$pkg" ]; then
gokhlayeh@186 1234 erase_package_info
gokhlayeh@186 1235 else
gokhlayeh@412 1236 if [ "$pkg" -nt "stamp" ]; then
gokhlayeh@215 1237 updated_pkg="$updated_pkg
gokhlayeh@215 1238 $PACKAGE $pkg"
gokhlayeh@266 1239 elif [ ! -f $WOK/$PACKAGE/receipt ] && \
gokhlayeh@266 1240 [ "$COMMAND" = check-incoming -o "$pkg_repository" = "$INCOMING_REPOSITORY" ]; then
gokhlayeh@266 1241 erase_package_info
gokhlayeh@266 1242 echo "Removing $PACKAGE from $pkg_repository."
gokhlayeh@266 1243 rm $pkg
gokhlayeh@266 1244 [ -d $WOK/$PACKAGE ] && rm -r $WOK/$PACKAGE
gokhlayeh@282 1245 sed "/^$PACKAGE\t/d" -i $wan_db $dep_db
gokhlayeh@282 1246 for i in cookorder.txt cooklist commit blocked broken; do
gokhlayeh@282 1247 sed "/^$PACKAGE$/d" -i $PACKAGES_REPOSITORY/$i
gokhlayeh@282 1248 done
gokhlayeh@282 1249 rm -f $LOCAL_REPOSITORY/log/$PACKAGE.html
gokhlayeh@352 1250 if [ "$pkg_repository" = "$INCOMING_REPOSITORY" ] && \
gokhlayeh@352 1251 [ "$(sed 1!d $PACKAGES_REPOSITORY/cookorder.txt)" != "#PlanSort" ] ; then
gokhlayeh@266 1252 sed 1i"#PlanSort" -i $PACKAGES_REPOSITORY/cookorder.txt
gokhlayeh@266 1253 regen_cooklist=yes
gokhlayeh@266 1254 else
gokhlayeh@266 1255 echo "$PACKAGE" >> $PACKAGES_REPOSITORY/removed
gokhlayeh@266 1256 sed -n '1,10p' -i $PACKAGES_REPOSITORY/removed
gokhlayeh@266 1257 fi
gokhlayeh@186 1258 fi
pascal@178 1259 fi
pascal@178 1260 done
gokhlayeh@412 1261 rm stamp
gokhlayeh@215 1262 echo "$updated_pkg" | sed 1d | while read PACKAGE pkg; do
gokhlayeh@202 1263 erase_package_info
gokhlayeh@202 1264 get_packages_info
gokhlayeh@202 1265 done
gokhlayeh@204 1266 unset updated_pkg
gokhlayeh@202 1267
gokhlayeh@186 1268 # Look for new packages.
gokhlayeh@195 1269 for pkg in $(echo $pkg_repository/*.tazpkg | fgrep -v '*'); do
gokhlayeh@199 1270 if ! fgrep -q " ${pkg##*/}" $pkg_repository/packages.md5; then
gokhlayeh@186 1271 get_packages_info
gokhlayeh@186 1272 fi
gokhlayeh@186 1273 done
gokhlayeh@186 1274 report end-step
gokhlayeh@186 1275 packages_db_end
gokhlayeh@186 1276 }
gokhlayeh@186 1277
gokhlayeh@186 1278 packages_db_start()
gokhlayeh@186 1279 {
gokhlayeh@186 1280 if [ ! -s packages.txt ]; then
gokhlayeh@186 1281 echo "# SliTaz GNU/Linux - Packages list
gokhlayeh@186 1282 #
paul@430 1283 # Packages : unknown
gokhlayeh@186 1284 # Date : $(date +%Y-%m-%d\ \%H:%M:%S)
gokhlayeh@215 1285 #
gokhlayeh@215 1286 " > packages.txt
pascal@62 1287 else
paul@430 1288 sed -e 's/^# Packages :.*/# Packages : unknown/' \
gokhlayeh@186 1289 -e "s/# Date :.*/# Date : $(date +%Y-%m-%d\ \%H:%M:%S)/" \
gokhlayeh@186 1290 -i packages.txt
pascal@60 1291 fi
gokhlayeh@186 1292
paul@430 1293 # Needed in some cases as tazwok defines RECEIPT at configuration time
paul@430 1294 # in this particular case it can break the script.
gokhlayeh@186 1295 unset RECEIPT
gokhlayeh@186 1296 }
pankso@28 1297
gokhlayeh@186 1298 erase_package_info()
gokhlayeh@186 1299 {
gokhlayeh@186 1300 cd $pkg_repository
gokhlayeh@186 1301 sed "/^$PACKAGE$/,/^$/d" -i packages.txt
gokhlayeh@186 1302 sed "/^$PACKAGE /d" -i packages.desc
gokhlayeh@186 1303 sed -e "s/=$PACKAGE /= /" -e "s/ $PACKAGE / /" -e "s/ $PACKAGE$//" \
gokhlayeh@186 1304 -e "/=$PACKAGE$/d" -e "s/=[0-9,a-z,A-Z]:$PACKAGE /= /" \
gokhlayeh@186 1305 -e "s/ [0-9,a-z,A-Z]:$PACKAGE / /" -e "s/ [0-9,a-z,A-Z]:$PACKAGE$/ /" \
gokhlayeh@186 1306 -e "/=[0-9,a-z,A-Z]:$PACKAGE$/d" \
gokhlayeh@186 1307 -i packages.equiv
gokhlayeh@186 1308 sed "/^$PACKAGE:/d" -i files.list
gokhlayeh@186 1309 sed "/^$(basename ${pkg%.tazpkg})$/d" -i packages.list
gokhlayeh@186 1310 sed "/ $(basename $pkg)$/d" -i packages.md5
gokhlayeh@186 1311 }
gokhlayeh@186 1312
gokhlayeh@186 1313 get_packages_info()
gokhlayeh@186 1314 {
paul@430 1315 # If there's no taz folder in the wok, extract info from the
gokhlayeh@186 1316 # package.
gokhlayeh@186 1317 get_pkg_files $pkg
gokhlayeh@186 1318 source_receipt
paul@430 1319 echo "Getting data from $PACKAGE"
gokhlayeh@186 1320
gokhlayeh@186 1321 cat >> $pkg_repository/packages.txt << _EOT_
pankso@28 1322 $PACKAGE
gokhlayeh@186 1323 $VERSION$EXTRAVERSION
pankso@28 1324 $SHORT_DESC
pankso@28 1325 _EOT_
gokhlayeh@215 1326 if [ "$PACKED_SIZE" ]; then
gokhlayeh@215 1327 cat >> $pkg_repository/packages.txt << _EOT_
pankso@133 1328 $PACKED_SIZE ($UNPACKED_SIZE installed)
gokhlayeh@215 1329
pascal@60 1330 _EOT_
gokhlayeh@215 1331 else
gokhlayeh@215 1332 echo "" >> $pkg_repository/packages.txt
pascal@60 1333 fi
gokhlayeh@186 1334
paul@121 1335 # Packages.desc is used by Tazpkgbox <tree>.
gokhlayeh@186 1336 echo "$PACKAGE | $VERSION$EXTRAVERSION | $SHORT_DESC | $CATEGORY | $WEB_SITE" >> $pkg_repository/packages.desc
gokhlayeh@186 1337
paul@430 1338 # Packages.equiv is used by tazpkg install to check depends.
pascal@99 1339 for i in $PROVIDE; do
pascal@99 1340 DEST=""
gokhlayeh@195 1341 echo $i | fgrep -q : && DEST="${i#*:}:"
gokhlayeh@186 1342 if grep -qs ^${i%:*}= $pkg_repository/packages.equiv; then
gokhlayeh@186 1343 sed -i "s/^${i%:*}=/${i%:*}=$DEST$PACKAGE /" $pkg_repository/packages.equiv
pascal@99 1344 else
gokhlayeh@186 1345 echo "${i%:*}=$DEST$PACKAGE" >> $pkg_repository/packages.equiv
gokhlayeh@186 1346 fi
gokhlayeh@186 1347 done
gokhlayeh@186 1348
gokhlayeh@186 1349 if [ -f files.list ]; then
gokhlayeh@186 1350 { echo "$PACKAGE"; cat files.list; } | awk '
gokhlayeh@186 1351 BEGIN { name="" } { if (name == "") name=$0; else printf("%s: %s\n",name,$0); }' >> $pkg_repository/files.list
gokhlayeh@186 1352 fi
gokhlayeh@186 1353
gokhlayeh@186 1354 cd .. && rm -r "$pkg_files_dir"
gokhlayeh@186 1355
gokhlayeh@186 1356 cd $pkg_repository
gokhlayeh@186 1357 echo $(basename ${pkg%.tazpkg}) >> packages.list
gokhlayeh@186 1358 [ ! "$package_md5" ] && package_md5=$(md5sum $(basename $pkg))
gokhlayeh@186 1359 echo "$package_md5" >> packages.md5
gokhlayeh@186 1360 unset package_md5
gokhlayeh@186 1361 }
gokhlayeh@186 1362
gokhlayeh@186 1363 source_receipt()
gokhlayeh@186 1364 {
gokhlayeh@186 1365 unset PACKAGE SOURCE VERSION EXTRAVERSION CATEGORY SHORT_DESC \
gokhlayeh@186 1366 MAINTAINER WEB_SITE WGET_URL DEPENDS BUILD_DEPENDS WANTED \
gokhlayeh@186 1367 PACKED_SIZE UNPACKED_SIZE COOK_OPT PROVIDE CONFIG_FILES TAGS \
gokhlayeh@298 1368 src _pkg DESTDIR CONFIG_SITE BRANCH TARBALL stuff wanted_stuff
gokhlayeh@186 1369 . ${RECEIPT:-$PWD/receipt}
gokhlayeh@186 1370 }
gokhlayeh@186 1371
gokhlayeh@186 1372 packages_db_end()
gokhlayeh@186 1373 {
gokhlayeh@186 1374 cd $pkg_repository
gokhlayeh@186 1375 pkgs=$(wc -l packages.list | sed 's/ .*//')
gokhlayeh@186 1376 sed "s/# Packages : .*/# Packages : $pkgs/" -i packages.txt
gokhlayeh@186 1377
paul@430 1378 # If lists were updated it's generally needed to sort them well.
gokhlayeh@186 1379 if ! sort -c packages.list 2> /dev/null; then
gokhlayeh@186 1380 report step "Sorting packages lists"
gokhlayeh@186 1381 for file in packages.list packages.desc packages.equiv; do
gokhlayeh@186 1382 [ -f $file ] || continue
gokhlayeh@186 1383 sort -o $file $file
gokhlayeh@186 1384 done
gokhlayeh@186 1385 report end-step
gokhlayeh@186 1386 fi
gokhlayeh@186 1387
paul@430 1388 # Dont log this because lzma always output errors.
gokhlayeh@186 1389 lzma e files.list files.list.lzma
gokhlayeh@204 1390 rm -f files.list
gokhlayeh@204 1391 [ -f packages.equiv ] || touch packages.equiv
gokhlayeh@186 1392 }
gokhlayeh@186 1393
gokhlayeh@186 1394 ########################################################################
gokhlayeh@186 1395 # This section contains functions to generate wok database.
gokhlayeh@186 1396 ########################
gokhlayeh@186 1397
gokhlayeh@186 1398 gen_wok_db()
gokhlayeh@186 1399 {
gokhlayeh@204 1400 report step "Generating wok database"
gokhlayeh@186 1401 report open-bloc
gokhlayeh@204 1402 report step "Removing old files"
gokhlayeh@204 1403 for file in $wan_db $dep_db $PACKAGES_REPOSITORY/cookorder.txt; do
gokhlayeh@204 1404 [ -f $file ] && rm $file
gokhlayeh@204 1405 done
gokhlayeh@186 1406 report step "Generating wok-wanted.txt"
gokhlayeh@204 1407 gen_wan_db
gokhlayeh@186 1408 report step "Generating wok-depends.txt"
gokhlayeh@204 1409 for PACKAGE in $(cut -f1 -d '|' $PACKAGES_REPOSITORY/packages.desc \
gokhlayeh@204 1410 $INCOMING_REPOSITORY/packages.desc | sort -u); do
gokhlayeh@186 1411 RECEIPT=$WOK/$PACKAGE/receipt
gokhlayeh@186 1412 if [ -s $RECEIPT ]; then
gokhlayeh@186 1413 source_receipt
gokhlayeh@186 1414 echo -e $PACKAGE"\t "$DEPENDS" \t "$BUILD_DEPENDS' ' >> $dep_db
pankso@133 1415 fi
pascal@99 1416 done
gokhlayeh@215 1417 sort_db
gokhlayeh@204 1418 report close-bloc
pankso@28 1419 }
pankso@28 1420
gokhlayeh@204 1421 gen_wan_db()
pascal@91 1422 {
gokhlayeh@204 1423 for RECEIPT in $(fgrep -l WANTED $WOK/*/receipt); do
gokhlayeh@204 1424 WANTED=
gokhlayeh@204 1425 source $RECEIPT
gokhlayeh@204 1426 [ "$WANTED" ] || continue
gokhlayeh@204 1427 echo -e $PACKAGE"\t"$WANTED >> $tmp/wan_db
gokhlayeh@204 1428 done
gokhlayeh@215 1429 if ! [ -f $wan_db ] || [ "$(diff -q $tmp/wan_db $wan_db)" ]; then
gokhlayeh@204 1430 mv -f $tmp/wan_db $wan_db
gokhlayeh@204 1431 plan_regen_cookorder=yes
gokhlayeh@204 1432 else
gokhlayeh@204 1433 rm $tmp/wan_db
gokhlayeh@204 1434 fi
pascal@91 1435 }
pascal@91 1436
gokhlayeh@215 1437 update_wan_db()
gokhlayeh@215 1438 {
slaxemulator@326 1439 local PACKAGE=$PACKAGE
gokhlayeh@423 1440 wanted_list=$(fgrep WANTED=\"$PACKAGE\" $WOK/*/receipt | cut -f1 -d ':')
gokhlayeh@423 1441 grep $'\t'$PACKAGE $wan_db | cut -f 1 | while read wan; do
gokhlayeh@423 1442 echo "$wanted_list" | fgrep -q /$wan/receipt && continue
gokhlayeh@423 1443 sed "/^$wan\t/d" -i $wan_db
gokhlayeh@423 1444 plan_regen_cookorder=yes
gokhlayeh@423 1445 done
gokhlayeh@423 1446 for RECEIPT in $wanted_list; do
gokhlayeh@215 1447 WANTED=
gokhlayeh@215 1448 source $RECEIPT
gokhlayeh@215 1449 [ "$WANTED" ] || continue
gokhlayeh@219 1450 wan_info=$(echo -e $PACKAGE"\t"$WANTED)
gokhlayeh@411 1451 [ "$wan_info" = "$(grep -m1 ^$PACKAGE$'\t' $wan_db 2>/dev/null)" ] && continue
gokhlayeh@215 1452 sed "/^$PACKAGE\t/d" -i $wan_db
gokhlayeh@220 1453 echo "$wan_info" >> $wan_db
gokhlayeh@215 1454 plan_regen_cookorder=yes
gokhlayeh@215 1455 plan_sort_wandb=yes
gokhlayeh@215 1456 done
gokhlayeh@423 1457 unset wanted_list
gokhlayeh@215 1458 }
gokhlayeh@215 1459
gokhlayeh@204 1460 update_dep_db()
gokhlayeh@204 1461 {
gokhlayeh@204 1462 dep_info=$(echo -e $PACKAGE"\t "$DEPENDS" \t "$BUILD_DEPENDS' ')
gokhlayeh@215 1463 [ "$dep_info" = "$(grep -m1 ^$PACKAGE$'\t' $dep_db 2>/dev/null)" ] && return
gokhlayeh@204 1464 sed "/^$PACKAGE\t/d" -i $dep_db
gokhlayeh@204 1465 echo "$dep_info" >> $dep_db
gokhlayeh@204 1466 plan_regen_cookorder=yes
gokhlayeh@204 1467 plan_sort_depdb=yes
pascal@178 1468 }
pascal@178 1469
gokhlayeh@186 1470 sort_db()
pascal@178 1471 {
gokhlayeh@186 1472 report step "Generating cookorder.txt"
gokhlayeh@186 1473 cat $dep_db | sed 's/ \t / /' | while read PACKAGE BUILD_DEPENDS; do
gokhlayeh@186 1474 grep -q ^$PACKAGE$'\t' $wan_db && continue
gokhlayeh@186 1475
gokhlayeh@186 1476 # Replace each BUILD_DEPENDS with a WANTED package by it's
gokhlayeh@186 1477 # WANTED package.
gokhlayeh@186 1478 replace_by_wanted()
gokhlayeh@186 1479 {
gokhlayeh@186 1480 for p in $BUILD_DEPENDS; do
gokhlayeh@186 1481 if grep -q ^$p$'\t' $wan_db; then
gokhlayeh@186 1482 echo -n $(grep ^$p$'\t' $wan_db | cut -f 2)' '
gokhlayeh@186 1483 else
gokhlayeh@186 1484 echo -n $p' '
gokhlayeh@186 1485 fi
gokhlayeh@186 1486 done | tr ' ' '\n' | sort -u | sed "/^$PACKAGE$/d" | tr '\n' ' '
gokhlayeh@186 1487 }
gokhlayeh@186 1488 echo -e $PACKAGE"\t $(replace_by_wanted) "
gokhlayeh@186 1489 done > $tmp/db
gokhlayeh@186 1490 while [ -s "$tmp/db" ]; do
gokhlayeh@186 1491 status=start
gokhlayeh@186 1492 for pkg in $(cut -f 1 $tmp/db); do
gokhlayeh@195 1493 if ! fgrep -q ' '$pkg' ' $tmp/db; then
gokhlayeh@186 1494 echo $pkg >> $tmp/cookorder
gokhlayeh@186 1495 sed -e "/^$pkg\t/d" -e "s/ $pkg / /g" -i $tmp/db
gokhlayeh@186 1496 status=proceed
gokhlayeh@186 1497 fi
gokhlayeh@186 1498 done
gokhlayeh@186 1499 if [ "$status" = start ]; then
gokhlayeh@186 1500 cp -f $tmp/db /tmp/remain-depends.txt
paul@430 1501 echo "Can't go further because of dependency loop(s). The remaining packages will be commented in the cookorder and will be unbuilt in case of major updates until the problem is solved." >&2
gokhlayeh@186 1502 for blocked in $(cut -f 1 $tmp/db); do
gokhlayeh@186 1503 echo "$blocked" >> $PACKAGES_REPOSITORY/blocked
gokhlayeh@186 1504 done
gokhlayeh@186 1505 break
gokhlayeh@186 1506 fi
gokhlayeh@186 1507 done
gokhlayeh@186 1508 [ -s $tmp/cookorder ] || touch $tmp/cookorder
gokhlayeh@186 1509
gokhlayeh@186 1510 # The toolchain packages are moved in first position.
gokhlayeh@186 1511 grep $(for pkg in `scan "$SLITAZ_TOOLCHAIN $SLITAZ_TOOLCHAIN_EXTRA" \
gokhlayeh@186 1512 --look_for=all --with_args`; do echo " -e ^$pkg$"; done) \
gokhlayeh@186 1513 $tmp/cookorder | tac > $PACKAGES_REPOSITORY/cookorder.txt
gokhlayeh@186 1514 for pkg in $(cat $PACKAGES_REPOSITORY/cookorder.txt); do
gokhlayeh@186 1515 sed "/^$pkg$/d" -i $tmp/cookorder
gokhlayeh@186 1516 done
gokhlayeh@186 1517
gokhlayeh@186 1518 tac $tmp/cookorder >> $PACKAGES_REPOSITORY/cookorder.txt
gokhlayeh@204 1519 unset plan_regen_cookorder
gokhlayeh@186 1520 report end-step
pascal@178 1521 }
pascal@178 1522
gokhlayeh@186 1523 ########################################################################
gokhlayeh@186 1524 # SCAN CORE
gokhlayeh@186 1525 ########################
paul@430 1526 # Includes various scan core-functions. It's not intended to be used
gokhlayeh@186 1527 # directly : prefer scan wrappers in next section.
gokhlayeh@186 1528
gokhlayeh@186 1529 look_for_dep()
gokhlayeh@186 1530 {
gokhlayeh@186 1531 if [ "$undigest" ] && [ ! -f "$WOK/$PACKAGE/receipt" ]; then
gokhlayeh@280 1532 grep -m1 ^$PACKAGE$'\t' $SLITAZ_DIR/$SLITAZ_VERSION/packages-incoming/wok-depends.txt \
gokhlayeh@186 1533 | cut -f 2
gokhlayeh@186 1534 else
gokhlayeh@280 1535 grep -m1 ^$PACKAGE$'\t' $INCOMING_REPOSITORY/wok-depends.txt | \
gokhlayeh@186 1536 cut -f 2
gokhlayeh@186 1537 fi
gokhlayeh@186 1538 }
gokhlayeh@186 1539
gokhlayeh@186 1540 look_for_bdep()
gokhlayeh@186 1541 {
gokhlayeh@186 1542 look_for_all
gokhlayeh@186 1543 }
gokhlayeh@186 1544
gokhlayeh@186 1545 look_for_all()
gokhlayeh@186 1546 {
gokhlayeh@186 1547 if [ "$undigest" ] && [ ! -f "$WOK/$PACKAGE/receipt" ]; then
gokhlayeh@280 1548 grep -m1 ^$PACKAGE$'\t' $SLITAZ_DIR/$SLITAZ_VERSION/packages-incoming/wok-depends.txt \
gokhlayeh@186 1549 | cut -f 2,3 | sed 's/ / /'
gokhlayeh@186 1550 else
gokhlayeh@280 1551 grep -m1 ^$PACKAGE$'\t' $INCOMING_REPOSITORY/wok-depends.txt | \
gokhlayeh@186 1552 cut -f 2,3 | sed 's/ / /'
gokhlayeh@186 1553 fi
gokhlayeh@186 1554 }
gokhlayeh@186 1555
gokhlayeh@186 1556 look_for_rdep()
gokhlayeh@186 1557 {
gokhlayeh@195 1558 fgrep ' '$PACKAGE' ' $INCOMING_REPOSITORY/wok-depends.txt | cut -f 1
gokhlayeh@186 1559 if [ "$undigest" ]; then
gokhlayeh@240 1560 for rdep in $(fgrep ' '$PACKAGE' ' $SLITAZ_DIR/$SLITAZ_VERSION/packages-incoming/wok-depends.txt | cut -f 1); do
gokhlayeh@186 1561 if [ ! -f "WOK$/$rdep/receipt" ]; then
gokhlayeh@186 1562 echo "$rdep"
gokhlayeh@186 1563 fi
gokhlayeh@186 1564 done
gokhlayeh@186 1565 fi
gokhlayeh@186 1566 }
gokhlayeh@186 1567
gokhlayeh@186 1568 look_for_rbdep()
gokhlayeh@186 1569 {
gokhlayeh@195 1570 fgrep ' '$PACKAGE' ' $INCOMING_REPOSITORY/wok-depends.txt | \
gokhlayeh@195 1571 cut -f 1,3 | fgrep ' '$PACKAGE' ' | cut -f 1
gokhlayeh@186 1572 if [ "$undigest" ]; then
gokhlayeh@240 1573 for rdep in $(fgrep ' '$PACKAGE' ' $SLITAZ_DIR/$SLITAZ_VERSION/packages-incoming/wok-depends.txt \
gokhlayeh@195 1574 | cut -f 1,3 | fgrep ' '$PACKAGE' ' | cut -f 1); do
gokhlayeh@186 1575 if [ ! -f "WOK$/$rdep/receipt" ]; then
gokhlayeh@186 1576 echo "$rdep"
gokhlayeh@186 1577 fi
gokhlayeh@186 1578 done
gokhlayeh@186 1579 fi
gokhlayeh@186 1580 }
gokhlayeh@186 1581
gokhlayeh@186 1582 # Return WANTED if it exists.
gokhlayeh@186 1583 look_for_wanted()
gokhlayeh@186 1584 {
gokhlayeh@186 1585 if [ "$undigest" ] && [ ! -f "$WOK/$PACKAGE/receipt" ]; then
gokhlayeh@280 1586 grep -m1 ^$PACKAGE$'\t' $SLITAZ_DIR/$SLITAZ_VERSION/packages-incoming/wok-wanted.txt | cut -f 2
gokhlayeh@186 1587 else
gokhlayeh@280 1588 grep -m1 ^$PACKAGE$'\t' $INCOMING_REPOSITORY/wok-wanted.txt | cut -f 2
gokhlayeh@186 1589 fi
gokhlayeh@186 1590 }
gokhlayeh@186 1591
gokhlayeh@186 1592 # Return packages which wants PACKAGE.
gokhlayeh@186 1593 look_for_rwanted()
gokhlayeh@186 1594 {
gokhlayeh@186 1595 grep $'\t'$PACKAGE$ $INCOMING_REPOSITORY/wok-wanted.txt | cut -f 1
gokhlayeh@186 1596 if [ "$undigest" ]; then
gokhlayeh@240 1597 for rwanted in $(grep $'\t'$PACKAGE$ $SLITAZ_DIR/$SLITAZ_VERSION/packages-incoming/wok-wanted.txt | cut -f 1); do
gokhlayeh@186 1598 if [ ! -f "$WOK/$rwanted/receipt" ]; then
gokhlayeh@186 1599 echo "$rwanted"
gokhlayeh@186 1600 fi
gokhlayeh@186 1601 done
gokhlayeh@186 1602 fi
gokhlayeh@186 1603 }
gokhlayeh@186 1604
gokhlayeh@186 1605 look_for_dev()
gokhlayeh@186 1606 {
gokhlayeh@223 1607 WANTED=$(look_for_wanted)
gokhlayeh@223 1608 if [ "$WANTED" ]; then
gokhlayeh@223 1609 if [ "$undigest" ] && [ ! -f "$WOK/$WANTED/receipt" ]; then
gokhlayeh@223 1610 [ -f "$SLITAZ_DIR/$SLITAZ_VERSION/wok/$WANTED-dev/receipt" ] && echo $WANTED-dev
gokhlayeh@223 1611 else
gokhlayeh@223 1612 [ -f "$WOK/$WANTED-dev/receipt" ] && echo $WANTED-dev
gokhlayeh@223 1613 fi
gokhlayeh@223 1614 fi
gokhlayeh@223 1615 if [ "$undigest" ] && [ ! -f "$WOK/$PACKAGE/receipt" ]; then
gokhlayeh@223 1616 [ -f "$SLITAZ_DIR/$SLITAZ_VERSION/wok/$PACKAGE-dev/receipt" ] && echo $PACKAGE-dev
gokhlayeh@223 1617 else
gokhlayeh@223 1618 [ -f "$WOK/$PACKAGE-dev/receipt" ] && echo $PACKAGE-dev
gokhlayeh@223 1619 fi
gokhlayeh@186 1620 }
gokhlayeh@186 1621
gokhlayeh@215 1622 with_dev()
gokhlayeh@215 1623 {
gokhlayeh@215 1624 for PACKAGE in $(cat); do
gokhlayeh@215 1625 echo $PACKAGE
gokhlayeh@215 1626 look_for_dev
gokhlayeh@215 1627 done
gokhlayeh@215 1628 }
gokhlayeh@215 1629
gokhlayeh@215 1630 with_wanted()
gokhlayeh@215 1631 {
gokhlayeh@215 1632 for PACKAGE in $(cat); do
gokhlayeh@215 1633 echo $PACKAGE
gokhlayeh@215 1634 look_for_wanted
gokhlayeh@215 1635 done
gokhlayeh@215 1636 }
gokhlayeh@215 1637
gokhlayeh@215 1638 use_wanted()
gokhlayeh@215 1639 {
gokhlayeh@215 1640 for input in $(cat); do
gokhlayeh@215 1641 { grep ^$input$'\t' $wan_db || echo $input
gokhlayeh@215 1642 } | sed 's/.*\t//'
gokhlayeh@215 1643 done
gokhlayeh@215 1644 }
gokhlayeh@215 1645
gokhlayeh@186 1646 ########################################################################
gokhlayeh@186 1647 # SCAN
gokhlayeh@186 1648 ########################
gokhlayeh@186 1649 # Use wok-wanted.txt and wok-depeds.txt to scan depends.
gokhlayeh@186 1650 # Option in command line (must be first arg) :
gokhlayeh@186 1651 # --look_for=bdep/rbdep - Look for depends or reverse depends.
gokhlayeh@186 1652 # --with_dev - Add development packages (*-dev) in the result.
gokhlayeh@186 1653 # --with_wanted - Add package+reverse wanted in the result.
gokhlayeh@186 1654 # --with_args - Include packages in argument in the result.
gokhlayeh@186 1655
gokhlayeh@186 1656 scan()
gokhlayeh@186 1657 {
gokhlayeh@186 1658 # Get packages in argument.
slaxemulator@326 1659 local PACKAGE=$PACKAGE WANTED=$WANTED pkg_list=
gokhlayeh@186 1660 for arg in $@; do
gokhlayeh@186 1661 [ "$arg" = "${arg#--}" ] || continue
gokhlayeh@186 1662 pkg_list="$pkg_list $arg"
gokhlayeh@186 1663 done
gokhlayeh@204 1664
gokhlayeh@186 1665 # Get options.
gokhlayeh@186 1666 [ "$pkg_list" ] || return
gokhlayeh@186 1667 local cooklist= look_for= with_dev= with_wanted= with_args= log_command="$0 $@" \
gokhlayeh@215 1668 get_options_list="look_for with_dev with_wanted with_args cooklist use_wanted"
gokhlayeh@186 1669 get_options
gokhlayeh@186 1670
gokhlayeh@186 1671 # Cooklist is a special case where we need to modify a little
gokhlayeh@186 1672 # scan behavior
gokhlayeh@186 1673 if [ "$cooklist" ]; then
gokhlayeh@204 1674 gen_wan_db
gokhlayeh@204 1675 look_for=all && with_args=yes && with_dev= && with_wanted=
gokhlayeh@204 1676 filter=use_wanted
gokhlayeh@241 1677 if [ "$COMMAND" = gen-cooklist ]; then
gokhlayeh@241 1678 for PACKAGE in $pkg_list; do
gokhlayeh@241 1679 grep -q ^$PACKAGE$'\t' $dep_db && continue
gokhlayeh@241 1680 [ -d "$WOK/$p" ] || continue
gokhlayeh@241 1681 check_for_missing
gokhlayeh@241 1682 done
gokhlayeh@241 1683 append_to_dep()
gokhlayeh@241 1684 {
gokhlayeh@241 1685 if ! grep -q ^$PACKAGE$'\t' $dep_db; then
gokhlayeh@241 1686 check_for_missing && echo $PACKAGE >> $tmp/dep
gokhlayeh@241 1687 else
gokhlayeh@241 1688 echo $PACKAGE >> $tmp/dep
gokhlayeh@241 1689 fi
gokhlayeh@241 1690 }
gokhlayeh@241 1691 else
gokhlayeh@241 1692 append_to_dep()
gokhlayeh@241 1693 {
gokhlayeh@241 1694 check_for_commit && echo $PACKAGE >> $tmp/dep
gokhlayeh@241 1695 }
gokhlayeh@241 1696 fi
gokhlayeh@204 1697 else
gokhlayeh@204 1698 append_to_dep()
gokhlayeh@204 1699 {
gokhlayeh@204 1700 echo $PACKAGE >> $tmp/dep
gokhlayeh@204 1701 }
gokhlayeh@240 1702 # If requested packages are not in dep_db, partial generation of this db is needed.
gokhlayeh@241 1703 for PACKAGE in $pkg_list; do
gokhlayeh@241 1704 grep -q ^$PACKAGE$'\t' $dep_db && continue
gokhlayeh@240 1705 [ -d "$WOK/$p" ] || continue
gokhlayeh@240 1706 plan_check_for_missing=yes
gokhlayeh@240 1707 check_for_missing
gokhlayeh@240 1708 done
gokhlayeh@240 1709 if [ "$plan_check_for_missing" ]; then
gokhlayeh@240 1710 append_to_dep()
gokhlayeh@240 1711 {
gokhlayeh@240 1712 if ! grep -q ^$PACKAGE$'\t' $dep_db; then
gokhlayeh@240 1713 check_for_missing && echo $PACKAGE >> $tmp/dep
gokhlayeh@240 1714 else
gokhlayeh@240 1715 echo $PACKAGE >> $tmp/dep
gokhlayeh@240 1716 fi
gokhlayeh@240 1717 }
gokhlayeh@240 1718 check_db_status=yes
gokhlayeh@240 1719 unset plan_check_for_missing
gokhlayeh@240 1720 fi
gokhlayeh@186 1721 fi
gokhlayeh@215 1722
gokhlayeh@204 1723 [ "$with_dev" ] && filter=with_dev
gokhlayeh@204 1724 [ "$with_wanted" ] && filter=with_wanted
gokhlayeh@204 1725 if [ "$filter" ]; then
gokhlayeh@291 1726 pkg_list=$(echo $pkg_list | $filter | sort -u)
gokhlayeh@204 1727 scan_pkg()
gokhlayeh@204 1728 {
gokhlayeh@204 1729 look_for_$look_for | $filter
gokhlayeh@204 1730 }
gokhlayeh@204 1731 else
gokhlayeh@204 1732 scan_pkg()
gokhlayeh@204 1733 {
gokhlayeh@204 1734 look_for_$look_for
gokhlayeh@204 1735 }
gokhlayeh@204 1736 fi
gokhlayeh@215 1737 touch $tmp/dep
gokhlayeh@204 1738 for PACKAGE in $pkg_list; do
gokhlayeh@204 1739 [ "$with_args" ] && append_to_dep
gokhlayeh@204 1740 scan_pkg
gokhlayeh@186 1741 done | tr ' ' '\n' | sort -u > $tmp/list
gokhlayeh@186 1742 [ "$look_for" = bdep ] && look_for=dep
gokhlayeh@186 1743 while [ -s $tmp/list ]; do
gokhlayeh@186 1744 PACKAGE=$(sed 1!d $tmp/list)
gokhlayeh@186 1745 sed 1d -i $tmp/list
gokhlayeh@204 1746 append_to_dep
gokhlayeh@204 1747 for pkg in $(scan_pkg); do
gokhlayeh@204 1748 if ! grep -q ^$pkg$ $tmp/list $tmp/dep; then
gokhlayeh@204 1749 echo $pkg >> $tmp/list
gokhlayeh@186 1750 fi
gokhlayeh@186 1751 done
gokhlayeh@186 1752 done
gokhlayeh@204 1753 if [ "$cooklist" ]; then
gokhlayeh@204 1754 mv $tmp/dep $tmp/cooklist
gokhlayeh@215 1755 else
gokhlayeh@204 1756 cat $tmp/dep | sort -u
gokhlayeh@186 1757 fi
gokhlayeh@204 1758 rm -f $tmp/dep $tmp/list
gokhlayeh@240 1759 if [ "$check_db_status" ]; then
gokhlayeh@240 1760 [ "$plan_sort_depdb" ] && sort -o $dep_db $dep_db && unset plan_sort_depdb
gokhlayeh@240 1761 [ "$plan_sort_wandb" ] && sort -o $wan_db $wan_db && unset plan_sort_wandb
gokhlayeh@352 1762 if [ "$plan_regen_cookorder" ] && \
gokhlayeh@352 1763 [ "$(sed 1!d $PACKAGES_REPOSITORY/cookorder.txt)" != "#PlanSort" ]; then
gokhlayeh@240 1764 grep -q "^#" $PACKAGES_REPOSITORY/cookorder.txt || \
gokhlayeh@240 1765 sed 1i"#PlanSort" -i $PACKAGES_REPOSITORY/cookorder.txt
gokhlayeh@240 1766 fi
gokhlayeh@240 1767 fi
gokhlayeh@186 1768 }
gokhlayeh@186 1769
gokhlayeh@186 1770 ########################################################################
paul@430 1771 # This section contains functions to check the package repository and
gokhlayeh@186 1772 # find which packages to cook.
gokhlayeh@186 1773 ########################
gokhlayeh@186 1774
gokhlayeh@240 1775 check_for_missing()
gokhlayeh@240 1776 {
slaxemulator@326 1777 local PACKAGE=$PACKAGE
gokhlayeh@240 1778 if ! check_for_pkg_in_wok; then
gokhlayeh@240 1779 [ "$?" = 2 ] && return 1
gokhlayeh@240 1780 return
gokhlayeh@240 1781 fi
gokhlayeh@241 1782 RECEIPT=$WOK/$PACKAGE/receipt
gokhlayeh@240 1783 source_receipt
gokhlayeh@240 1784 PACKAGE=${WANTED:-$PACKAGE}
gokhlayeh@240 1785 update_wan_db
gokhlayeh@240 1786 for PACKAGE in $(look_for_rwanted) $PACKAGE; do
gokhlayeh@240 1787 RECEIPT=$WOK/$PACKAGE/receipt
gokhlayeh@240 1788 source_receipt
gokhlayeh@240 1789 update_dep_db
gokhlayeh@240 1790 done
gokhlayeh@240 1791 }
gokhlayeh@240 1792
gokhlayeh@186 1793 check_for_commit()
gokhlayeh@186 1794 {
gokhlayeh@204 1795 if ! check_for_pkg_in_wok; then
gokhlayeh@204 1796 [ "$?" = 2 ] && return 1
gokhlayeh@204 1797 return
gokhlayeh@204 1798 fi
gokhlayeh@204 1799 for PACKAGE in $(look_for_rwanted) $PACKAGE; do
gokhlayeh@204 1800 RECEIPT=$WOK/$PACKAGE/receipt
gokhlayeh@186 1801 source_receipt
gokhlayeh@204 1802
gokhlayeh@186 1803 # We use md5 of cooking stuff in the packaged receipt to check
gokhlayeh@186 1804 # commit. We look consecutively in 3 different locations :
gokhlayeh@204 1805 # - in the wok/PACKAGE/taz/* folder
gokhlayeh@186 1806 # - in the receipt in the package in incoming repository
gokhlayeh@186 1807 # - in the receipt in the package in packages repository
paul@430 1808 # If md5sums match, there's no commit.
gokhlayeh@186 1809 check_for_commit_using_md5sum()
gokhlayeh@186 1810 {
gokhlayeh@186 1811 if [ ! -f $WOK/$PACKAGE/md5 ]; then
gokhlayeh@186 1812 sed -n '/# md5sum of cooking stuff :/,$p' receipt | \
gokhlayeh@186 1813 sed -e 1d -e 's/^# //' > $WOK/$PACKAGE/md5
gokhlayeh@186 1814 cd $WOK/$PACKAGE
gokhlayeh@186 1815 fi
gokhlayeh@204 1816
gokhlayeh@186 1817 if [ -s md5 ]; then
gokhlayeh@186 1818 if md5sum -cs md5; then
gokhlayeh@204 1819
gokhlayeh@204 1820 # If md5sum check if ok, check for new/missing files in
gokhlayeh@204 1821 # cooking stuff.
gokhlayeh@204 1822 for file in $([ -f receipt ] && echo receipt; \
gokhlayeh@204 1823 [ -f description.txt ] && echo description.txt; \
gokhlayeh@204 1824 [ -d stuff ] && find stuff); do
gokhlayeh@204 1825 if ! fgrep -q " $file" md5; then
gokhlayeh@186 1826 set_commited
gokhlayeh@186 1827 fi
gokhlayeh@186 1828 done
gokhlayeh@186 1829 else
gokhlayeh@186 1830 set_commited
gokhlayeh@186 1831 fi
gokhlayeh@186 1832 else
gokhlayeh@204 1833 set_commited
gokhlayeh@186 1834 fi
gokhlayeh@186 1835 }
gokhlayeh@186 1836 set_commited()
gokhlayeh@186 1837 {
gokhlayeh@204 1838 ! grep -q ^$PACKAGE$ $PACKAGES_REPOSITORY/commit &&
gokhlayeh@204 1839 echo $PACKAGE >> $PACKAGES_REPOSITORY/commit
gokhlayeh@186 1840 gen_cookmd5
gokhlayeh@204 1841 update_dep_db
gokhlayeh@186 1842 }
gokhlayeh@195 1843 taz_dir=$(echo $WOK/$PACKAGE/taz/$PACKAGE-* | fgrep -v '*')
gokhlayeh@186 1844 if [ -f $WOK/$PACKAGE/md5 ]; then
gokhlayeh@186 1845 cd $WOK/$PACKAGE
gokhlayeh@186 1846 check_for_commit_using_md5sum
gokhlayeh@186 1847 elif [ "$taz_dir" ]; then
gokhlayeh@186 1848 cd $taz_dir
gokhlayeh@186 1849 check_for_commit_using_md5sum
gokhlayeh@186 1850 else
gokhlayeh@195 1851 pkg=$(echo $INCOMING_REPOSITORY/$PACKAGE-$VERSION*.tazpkg | fgrep -v '*')
gokhlayeh@195 1852 [ "$pkg" ] || pkg=$(echo $PACKAGES_REPOSITORY/$PACKAGE-$VERSION*.tazpkg | fgrep -v '*')
gokhlayeh@186 1853 if [ "$pkg" ]; then
gokhlayeh@186 1854 get_pkg_files $pkg
gokhlayeh@186 1855 check_for_commit_using_md5sum
gokhlayeh@186 1856 rm -r $pkg_files_dir
gokhlayeh@204 1857 else
gokhlayeh@204 1858 set_commited
gokhlayeh@186 1859 fi
gokhlayeh@186 1860 fi
gokhlayeh@204 1861 [ "$forced" ] || echo $PACKAGE >> $tmp/checked
gokhlayeh@186 1862 done
gokhlayeh@204 1863 return
gokhlayeh@186 1864 }
gokhlayeh@186 1865
gokhlayeh@186 1866 gen_cook_list()
gokhlayeh@186 1867 {
gokhlayeh@204 1868 report step "Scanning wok"
gokhlayeh@204 1869 if [ "$pkg" ]; then
gokhlayeh@204 1870 scan $pkg --cooklist
gokhlayeh@204 1871 else
gokhlayeh@204 1872 scan `cat $cooklist` --cooklist
gokhlayeh@204 1873 fi
gokhlayeh@204 1874 report end-step
gokhlayeh@209 1875
gokhlayeh@209 1876 [ -s $tmp/checked ] || [ -s $tmp/cooklist ] || return
gokhlayeh@209 1877
gokhlayeh@209 1878 # Core toolchain should not be cooked unless cook-toolchain is used.
gokhlayeh@209 1879 if ! [ -f /etc/config.site.tmptoolchain ] ; then
gokhlayeh@209 1880 for PACKAGE in $(scan gcc --look_for=all --with_args --with_wanted); do
gokhlayeh@209 1881 grep -q ^$PACKAGE$ $PACKAGES_REPOSITORY/blocked || \
gokhlayeh@209 1882 echo $PACKAGE >> $PACKAGES_REPOSITORY/blocked
gokhlayeh@209 1883 done
gokhlayeh@209 1884 fi
gokhlayeh@313 1885
gokhlayeh@241 1886 if [ -s $PACKAGES_REPOSITORY/commit ] && [ "$COMMAND" != gen-cooklist ]; then
gokhlayeh@186 1887 cd $PACKAGES_REPOSITORY
gokhlayeh@186 1888 for PACKAGE in $(cat commit); do
gokhlayeh@186 1889 WANTED="$(look_for_wanted)"
gokhlayeh@186 1890 if [ "$WANTED" ]; then
gokhlayeh@204 1891 grep -q ^$WANTED$ broken cooklist blocked commit && continue
gokhlayeh@186 1892 fi
gokhlayeh@204 1893 grep -q ^$PACKAGE$ blocked cooklist && continue
gokhlayeh@204 1894 echo $PACKAGE >> cooklist
gokhlayeh@186 1895 done
gokhlayeh@186 1896 fi
gokhlayeh@186 1897 sort_cooklist
gokhlayeh@186 1898 }
gokhlayeh@186 1899
gokhlayeh@186 1900 sort_cooklist()
gokhlayeh@186 1901 {
gokhlayeh@266 1902 if [ "$(sed 1!d $PACKAGES_REPOSITORY/cookorder.txt)" = "#PlanSort" ]; then
gokhlayeh@266 1903 sed 1d -i $PACKAGES_REPOSITORY/cookorder.txt
gokhlayeh@266 1904 plan_regen_cookorder=yes
gokhlayeh@266 1905 fi
gokhlayeh@266 1906 [ "$plan_sort_depdb" ] && sort -o $dep_db $dep_db && unset plan_sort_depdb
gokhlayeh@266 1907 [ "$plan_regen_cookorder" ] && sort_db
gokhlayeh@313 1908 report step "Generating cooklist"
gokhlayeh@204 1909 if [ -f "$tmp/checked" ]; then
gokhlayeh@204 1910 rm -f $tmp/cooklist
gokhlayeh@204 1911 cat $tmp/checked | while read PACKAGE; do
gokhlayeh@204 1912 grep -q ^$PACKAGE$ $PACKAGES_REPOSITORY/cooklist && \
gokhlayeh@204 1913 echo $PACKAGE >> $tmp/cooklist
gokhlayeh@204 1914 done
gokhlayeh@209 1915 elif ! [ "$COMMAND" = gen-cooklist ]; then
gokhlayeh@209 1916 cat $PACKAGES_REPOSITORY/blocked | while read PACKAGE; do
gokhlayeh@209 1917 sed "/^$PACKAGE/d" -i $tmp/cooklist
gokhlayeh@209 1918 done
gokhlayeh@204 1919 fi
gokhlayeh@313 1920 report end-step
gokhlayeh@313 1921 [ -s $tmp/cooklist ] || return
gokhlayeh@215 1922
gokhlayeh@313 1923 report step "Sorting cooklist"
gokhlayeh@204 1924 for PACKAGE in $(cat $tmp/cooklist); do
gokhlayeh@204 1925 WANTED="$(look_for_wanted)"
gokhlayeh@204 1926 [ "$WANTED" ] || continue
gokhlayeh@297 1927 if grep -q ^$WANTED$ $PACKAGES_REPOSITORY/broken $tmp/cooklist; then
gokhlayeh@186 1928 sed "/^$PACKAGE$/d" -i $tmp/cooklist
gokhlayeh@204 1929 elif [ ! -d $WOK/$WANTED/install ]; then
gokhlayeh@204 1930 sed "/^$PACKAGE$/d" -i $tmp/cooklist
gokhlayeh@204 1931 echo $WANTED >> $tmp/cooklist
gokhlayeh@186 1932 fi
gokhlayeh@186 1933 done
gokhlayeh@186 1934
gokhlayeh@204 1935 # Use cookorder.txt to sort cooklist.
gokhlayeh@204 1936 if [ -s $tmp/cooklist ]; then
gokhlayeh@204 1937 cat $PACKAGES_REPOSITORY/cookorder.txt | while read PACKAGE; do
gokhlayeh@204 1938 if grep -q ^$PACKAGE$ $tmp/cooklist; then
gokhlayeh@204 1939 sed "/^$PACKAGE$/d" -i $tmp/cooklist
gokhlayeh@204 1940 echo $PACKAGE >> $tmp/cooklist.tmp
gokhlayeh@204 1941 fi
gokhlayeh@204 1942 done
gokhlayeh@204 1943
paul@430 1944 # Remaining packages in cooklist are those without compile_rules.
gokhlayeh@204 1945 # They can be cooked first in any order.
gokhlayeh@204 1946 if [ -f $tmp/cooklist.tmp ]; then
gokhlayeh@204 1947 cat $tmp/cooklist.tmp >> $tmp/cooklist
gokhlayeh@204 1948 rm $tmp/cooklist.tmp
gokhlayeh@204 1949 fi
gokhlayeh@204 1950
gokhlayeh@204 1951 cat $tmp/cooklist
gokhlayeh@204 1952 [ "$cooklist" = "$PACKAGES_REPOSITORY/cooklist" ] && \
gokhlayeh@204 1953 cat $tmp/cooklist > $cooklist
gokhlayeh@204 1954 fi
gokhlayeh@204 1955
gokhlayeh@186 1956 report end-step
gokhlayeh@186 1957 }
gokhlayeh@186 1958
gokhlayeh@284 1959 look_for_missing_pkg()
gokhlayeh@284 1960 {
gokhlayeh@284 1961 for pkg in $(cat $PACKAGES_REPOSITORY/$1); do
gokhlayeh@284 1962 grep -q ^$pkg$ $INCOMING_REPOSITORY/packages.txt \
gokhlayeh@284 1963 $PACKAGES_REPOSITORY/packages.txt || \
gokhlayeh@284 1964 continue
gokhlayeh@284 1965 echo $pkg
gokhlayeh@284 1966 done
gokhlayeh@284 1967 }
gokhlayeh@284 1968
gokhlayeh@186 1969 check_for_incoming()
gokhlayeh@186 1970 {
paul@430 1971 report step "Checking that all packages were cooked OK"
gokhlayeh@204 1972 [ -s $INCOMING_REPOSITORY/packages.desc ] || {
gokhlayeh@204 1973 echo "No packages in $INCOMING_REPOSITORY."
gokhlayeh@307 1974 report end-step; return; }
gokhlayeh@204 1975 if [ -s $PACKAGES_REPOSITORY/broken ]; then
gokhlayeh@290 1976 missingpkg=$(look_for_missing_pkg broken)
gokhlayeh@290 1977 if [ "$missingpkg" ]; then
paul@430 1978 echo "Don't move incoming packages to main repository because these ones are broken:" >&2
gokhlayeh@290 1979 echo "$missingpkg"
gokhlayeh@307 1980 report end-step
gokhlayeh@307 1981 return 1
gokhlayeh@290 1982 fi
gokhlayeh@186 1983 fi
gokhlayeh@204 1984 if [ -s $PACKAGES_REPOSITORY/cooklist ]; then
gokhlayeh@290 1985 missingpkg=$(look_for_missing_pkg cooklist)
gokhlayeh@290 1986 if [ "$missingpkg" ]; then
paul@430 1987 echo "Don't move incoming packages to main repository because these ones need to be cooked:" >&2
gokhlayeh@290 1988 echo "$missingpkg"
gokhlayeh@307 1989 report end-step
gokhlayeh@307 1990 return 1
gokhlayeh@290 1991 fi
gokhlayeh@204 1992 fi
gokhlayeh@306 1993 incoming_pkgs="$(cut -f 1 -d '|' $INCOMING_REPOSITORY/packages.desc)"
gokhlayeh@214 1994 if ! [ "$forced" ]; then
gokhlayeh@214 1995 cooklist=$PACKAGES_REPOSITORY/cooklist
gokhlayeh@313 1996 pkg="$incoming_pkgs"
gokhlayeh@214 1997 gen_cook_list
gokhlayeh@214 1998 if [ -s $PACKAGES_REPOSITORY/cooklist ]; then
gokhlayeh@290 1999 missingpkg=$(look_for_missing_pkg cooklist)
gokhlayeh@290 2000 if [ "$missingpkg" ]; then
paul@430 2001 echo "Don't move incoming packages to main repository because these ones need to be cooked:" >&2
gokhlayeh@290 2002 echo "$missingpkg"
gokhlayeh@307 2003 report end-step
gokhlayeh@307 2004 return 1
gokhlayeh@290 2005 fi
gokhlayeh@214 2006 fi
gokhlayeh@204 2007 fi
gokhlayeh@313 2008
gokhlayeh@204 2009 report step "Moving incoming packages to main repository"
gokhlayeh@204 2010 unset EXTRAVERSION
gokhlayeh@306 2011 for PACKAGE in $incoming_pkgs; do
gokhlayeh@186 2012 prev_VERSION=$(get_pkg_version $PACKAGES_REPOSITORY)
gokhlayeh@204 2013 VERSION=$(get_pkg_version $INCOMING_REPOSITORY)
gokhlayeh@186 2014 remove_previous_package $PACKAGES_REPOSITORY
gokhlayeh@204 2015 echo "Moving $PACKAGE..."
gokhlayeh@204 2016 mv -f $INCOMING_REPOSITORY/$PACKAGE-$VERSION.tazpkg $PACKAGES_REPOSITORY
gokhlayeh@204 2017 touch $PACKAGES_REPOSITORY/$PACKAGE-$VERSION.tazpkg
gokhlayeh@266 2018 previous_tarball=$(grep ^$PACKAGE:main $SOURCES_REPOSITORY/sources.list | cut -f2)
gokhlayeh@266 2019 sed -e "/^$PACKAGE:main/d" \
slaxemulator@275 2020 -e "s/^$PACKAGE:incoming/$PACKAGE:main/" \
gokhlayeh@266 2021 -i $SOURCES_REPOSITORY/sources.list
gokhlayeh@266 2022 if [ "$previous_tarball" ]; then
gokhlayeh@266 2023 grep -q $'\t'$previous_tarball$ $SOURCES_REPOSITORY/sources.list || \
gokhlayeh@266 2024 rm -f $SOURCES_REPOSITORY/$previous_tarball
gokhlayeh@266 2025 fi
gokhlayeh@204 2026 done
gokhlayeh@204 2027 for file in packages.list packages.equiv packages.md5 packages.desc \
gokhlayeh@204 2028 packages.txt; do
gokhlayeh@204 2029 echo -n "" > $INCOMING_REPOSITORY/$file
gokhlayeh@204 2030 done
gokhlayeh@204 2031 rm -r $INCOMING_REPOSITORY/files.list.lzma
gokhlayeh@186 2032 pkg_repository=$PACKAGES_REPOSITORY && update_packages_db
gokhlayeh@313 2033
gokhlayeh@313 2034 report step "Updating flavors"
gokhlayeh@313 2035 if [ -x /usr/bin/tazlito ] || [ -x /usr/bin/clean-chroot ]; then
gokhlayeh@313 2036 if ! [ -x /usr/bin/tazlito ]; then
gokhlayeh@313 2037 tazpkg get-install tazlito
gokhlayeh@313 2038 fi
gokhlayeh@313 2039
gokhlayeh@313 2040 # Handle cases where tazwok is used into main system;
gokhlayeh@313 2041 # Handle cases where SLITAZ_DIR is not /home/slitaz.
gokhlayeh@313 2042 [ -L /home/slitaz/flavors ] && rm /home/slitaz/flavors
gokhlayeh@313 2043 mkdir -p /home/slitaz
gokhlayeh@313 2044 ln -s $LOCAL_REPOSITORY/flavors /home/slitaz/flavors
gokhlayeh@313 2045
gokhlayeh@313 2046 cd $LOCAL_REPOSITORY/packages
gokhlayeh@313 2047 for i in $LOCAL_REPOSITORY/flavors/*; do
gokhlayeh@331 2048 [ -d "$i" ] || continue
gokhlayeh@313 2049 tazlito pack-flavor ${i##*/}
gokhlayeh@313 2050 done
gokhlayeh@313 2051
gokhlayeh@313 2052 noheader=""
gokhlayeh@313 2053 for i in *.flavor; do
gokhlayeh@313 2054 tazlito show-flavor $i --brief $noheader
gokhlayeh@313 2055 noheader="--noheader"
gokhlayeh@313 2056 done > flavors.list
gokhlayeh@313 2057 [ -x /usr/bin/clean-chroot ] && clean-chroot
gokhlayeh@313 2058 else
paul@430 2059 echo "Can't create up-to-date flavors because the tazlito package is missing." >&2
gokhlayeh@313 2060 fi
gokhlayeh@313 2061 report end-step
gokhlayeh@186 2062 }
gokhlayeh@186 2063
gokhlayeh@186 2064 ########################################################################
gokhlayeh@186 2065 # TAZWOK MAIN FUNCTIONS
gokhlayeh@186 2066 ########################
gokhlayeh@186 2067
gokhlayeh@186 2068 clean()
gokhlayeh@186 2069 {
gokhlayeh@186 2070 cd $WOK/$PACKAGE
gokhlayeh@186 2071 ls -A $WOK/$PACKAGE | grep -q -v -e ^receipt$ -e ^description.txt$ \
gokhlayeh@186 2072 -e ^stuff$ || return
gokhlayeh@186 2073
gokhlayeh@249 2074 [ "$COMMAND" = clean-wok ] || report step "Cleaning $PACKAGE"
gokhlayeh@186 2075 # Check for clean_wok function.
gokhlayeh@186 2076 if grep -q ^clean_wok $RECEIPT; then
gokhlayeh@186 2077 clean_wok
gokhlayeh@186 2078 fi
gokhlayeh@186 2079 # Clean should only have a receipt, stuff and optional desc.
gokhlayeh@186 2080 for f in `ls .`
gokhlayeh@186 2081 do
gokhlayeh@186 2082 case $f in
gokhlayeh@250 2083 receipt|stuff|description.txt|md5)
gokhlayeh@186 2084 continue ;;
gokhlayeh@186 2085 *)
gokhlayeh@263 2086 rm -rf $f ;;
gokhlayeh@186 2087 esac
gokhlayeh@186 2088 done
gokhlayeh@262 2089 [ "$COMMAND" != clean-wok ] && report end-step
gokhlayeh@186 2090 }
gokhlayeh@186 2091
gokhlayeh@186 2092 # Configure and make a package with the receipt.
gokhlayeh@186 2093 compile_package()
gokhlayeh@186 2094 {
gokhlayeh@186 2095 check_for_package_on_cmdline
gokhlayeh@186 2096
gokhlayeh@186 2097 # Include the receipt to get all needed variables and functions
gokhlayeh@186 2098 # and cd into the work directory to start the work.
gokhlayeh@186 2099 check_for_receipt
gokhlayeh@186 2100 source_receipt
gokhlayeh@186 2101
gokhlayeh@186 2102 # Log the package name and date.
gokhlayeh@186 2103 echo "date `date +%Y%m%d\ \%H:%M:%S`" >> $LOG
gokhlayeh@186 2104 echo "package $PACKAGE (compile)" >> $LOG
gokhlayeh@186 2105
gokhlayeh@186 2106 # Set wanted $src variable to help compiling.
gokhlayeh@186 2107 [ ! "$src" ] && set_src_path
gokhlayeh@186 2108 check_for_build_depends || return 1
gokhlayeh@186 2109 check_for_wanted
gokhlayeh@186 2110 unset target
gokhlayeh@186 2111 check_for_tarball && check_for_compile_rules
gokhlayeh@186 2112 }
gokhlayeh@186 2113
gokhlayeh@186 2114 # Cook command also include all features to manage lists which keep
gokhlayeh@186 2115 # track of wok/packages state.
gokhlayeh@186 2116 cook()
gokhlayeh@186 2117 {
gokhlayeh@186 2118 cook_code=
gokhlayeh@186 2119 set_common_path
gokhlayeh@186 2120 check_for_receipt
gokhlayeh@186 2121 source_receipt
gokhlayeh@186 2122
gokhlayeh@186 2123 # Define log path and start report.
gokhlayeh@186 2124 [ -f $LOCAL_REPOSITORY/log/$PACKAGE.html ] && rm $LOCAL_REPOSITORY/log/$PACKAGE.html
gokhlayeh@186 2125 report sublog $LOCAL_REPOSITORY/log/$PACKAGE.html
pascal@349 2126 echo "$PACKAGE" > $LOCAL_REPOSITORY/log/package
gokhlayeh@186 2127 report step "Cooking $PACKAGE"
gokhlayeh@186 2128 report open-bloc
gokhlayeh@186 2129
gokhlayeh@186 2130 clean $PACKAGE
gokhlayeh@186 2131 [ -s $tmp/cooklist ] && sed "/^$PACKAGE$/d" -i $tmp/cooklist
gokhlayeh@381 2132
gokhlayeh@186 2133 if compile_package; then
gokhlayeh@215 2134 remove_src
gokhlayeh@186 2135 refresh_packages_from_compile
gokhlayeh@186 2136 gen_package
gokhlayeh@186 2137
gokhlayeh@186 2138 # Update packages-incoming repository.
gokhlayeh@186 2139 store_pkgname=$PACKAGE
gokhlayeh@186 2140 pkg_repository=$INCOMING_REPOSITORY
gokhlayeh@186 2141 update_packages_db
gokhlayeh@186 2142
gokhlayeh@186 2143 PACKAGE=$store_pkgname
gokhlayeh@186 2144 unset store_pkgname
gokhlayeh@186 2145
gokhlayeh@186 2146 # Upgrade to cooked packages if it was previously installed.
paul@430 2147 report step "Looking for package(s) to upgrade"
gokhlayeh@186 2148 for pkg in $(look_for_rwanted) $PACKAGE; do
gokhlayeh@186 2149 if [ -d $INSTALLED/$pkg ]; then
gokhlayeh@186 2150 tazpkg get-install $pkg --forced
gokhlayeh@186 2151 fi
gokhlayeh@186 2152 done
gokhlayeh@186 2153 report end-step
gokhlayeh@186 2154 else
gokhlayeh@381 2155 set_pkg_broken
gokhlayeh@186 2156 cook_code=1
gokhlayeh@186 2157 fi
gokhlayeh@186 2158
gokhlayeh@186 2159 # Remove build_depends in cook mode (if in cooklist, it's done when
gokhlayeh@186 2160 # checking build_depends of next package and we remove only unneeded
gokhlayeh@186 2161 # packages to keep chroot minimal and gain some time).
gokhlayeh@210 2162 if [ "$COMMAND" = cook ]; then
gokhlayeh@210 2163 remove_build_depends $MISSING_PACKAGE
gokhlayeh@210 2164 [ -x /usr/bin/clean-chroot ] && clean-chroot
gokhlayeh@210 2165 fi
gokhlayeh@210 2166
gokhlayeh@186 2167 # Regen the cooklist if it was planned and command is not cook.
gokhlayeh@186 2168 [ "$regen_cooklist" ] && unset regen_cooklist && \
gokhlayeh@186 2169 [ "$COMMAND" != cook ] && sort_cooklist
gokhlayeh@186 2170
paul@430 2171 # Some hacks to set the bloc & function status as failed if cook has
gokhlayeh@186 2172 # failed.
gokhlayeh@186 2173 report_return_code=$cook_code
gokhlayeh@186 2174 report close-bloc
gokhlayeh@186 2175 report end-sublog
pascal@351 2176 rm -f $LOCAL_REPOSITORY/log/package
gokhlayeh@186 2177 return $cook_code
gokhlayeh@186 2178 }
gokhlayeh@186 2179
gokhlayeh@186 2180 cook_list()
gokhlayeh@186 2181 {
gokhlayeh@204 2182 if [ -s $tmp/cooklist ]; then
gokhlayeh@204 2183 if [ -f /usr/bin/tazchroot ]; then
paul@430 2184 # Note : options -main variables- are automatically kept by
gokhlayeh@204 2185 # the sub-applications tazchroot/tazwok; as well as report data.
gokhlayeh@204 2186 cd $LOCAL_REPOSITORY
gokhlayeh@204 2187 [ ! -f tazchroot.conf ] && configure_tazchroot
gokhlayeh@204 2188 tazchroot tazwok cook-list --SLITAZ_DIR=$SLITAZ_DIR --SLITAZ_VERSION=$SLITAZ_VERSION ${undigest:+ --undigest=$undigest}
gokhlayeh@204 2189 return
gokhlayeh@204 2190 fi
gokhlayeh@204 2191 while [ -s $tmp/cooklist ]; do
gokhlayeh@204 2192 PACKAGE=$(sed 1!d $tmp/cooklist)
gokhlayeh@204 2193 cook
gokhlayeh@204 2194 done
gokhlayeh@204 2195 remove_build_depends $MISSING_PACKAGE $remove_later
gokhlayeh@210 2196 [ -x /usr/bin/clean-chroot ] && clean-chroot
gokhlayeh@204 2197 else
gokhlayeh@186 2198 echo "Nothing to cook."
gokhlayeh@186 2199 return
gokhlayeh@186 2200 fi
gokhlayeh@186 2201 }
gokhlayeh@186 2202
gokhlayeh@186 2203 configure_tazchroot()
gokhlayeh@186 2204 {
gokhlayeh@190 2205 cat > $LOCAL_REPOSITORY/tazchroot.conf << EOF
gokhlayeh@186 2206 # Tazchroot configuration file - created by tazwok.
gokhlayeh@186 2207
paul@430 2208 # Default chroot path.
gokhlayeh@186 2209 SLITAZ_DIR=$SLITAZ_DIR
gokhlayeh@186 2210 SLITAZ_VERSION=$SLITAZ_VERSION
gokhlayeh@186 2211 $( [ "$undigest" ] && echo "undigest=$undigest" )
gokhlayeh@186 2212 LOCAL_REPOSITORY=$SLITAZ_DIR/$(if [ "$undigest" ]; then echo '$undigest'; else echo '$SLITAZ_VERSION'; fi)
gokhlayeh@186 2213 chroot_dir=\$LOCAL_REPOSITORY/chroot
gokhlayeh@186 2214
paul@430 2215 # Default scripts path (these scripts are added to the
paul@430 2216 # $chroot_dir/usr/bin and can be called with tazchroot script).
gokhlayeh@314 2217 script_dir=/usr/lib/slitaz/chroot-scripts/tazwok
gokhlayeh@186 2218
gokhlayeh@186 2219 # List of directories to mount.
gokhlayeh@318 2220 list_dir="$(for dir in packages wok src packages-incoming log flavors iso clean-wok; do echo $LOCAL_REPOSITORY/$dir; done)
gokhlayeh@186 2221 $SLITAZ_LOG$( [ "$undigest" ] && echo -e "\n$SLITAZ_DIR/$SLITAZ_VERSION/packages" )"
gokhlayeh@186 2222
gokhlayeh@186 2223 create_chroot()
gokhlayeh@186 2224 {
gokhlayeh@186 2225 mkdir -p \$chroot_dir
gokhlayeh@186 2226 for pkg in \$(tazwok build-depends toolchain --SLITAZ_DIR=\$SLITAZ_DIR --SLITAZ_VERSION=\$SLITAZ_VERSION${undigest:+ --undigest=\$undigest}); do
gokhlayeh@186 2227 tazpkg get-install \$pkg --root="\$chroot_dir"
gokhlayeh@186 2228 done
gokhlayeh@186 2229
gokhlayeh@186 2230 # Store list of installed packages needed by cleanchroot.
gokhlayeh@194 2231 ls -1 \$chroot_dir/\$INSTALLED > \$chroot_dir/\$LOCALSTATE/chroot-pkgs
gokhlayeh@186 2232
gokhlayeh@186 2233 sed -e "s~^SLITAZ_DIR=.*~SLITAZ_DIR=\$SLITAZ_DIR~" \\
gokhlayeh@186 2234 -e "s/^SLITAZ_VERSION=.*/SLITAZ_VERSION=\$SLITAZ_VERSION/" \\
gokhlayeh@186 2235 -i \$chroot_dir/etc/slitaz/slitaz.conf
gokhlayeh@186 2236 $( [ "$undigest" ] && echo ' echo "undigest='"$undigest"'" >> $chroot_dir/etc/slitaz/tazwok.conf')
gokhlayeh@186 2237 sed 's/LC_ALL/LC_ALL=POSIX/' -i \$chroot_dir/etc/profile
paul@430 2238 # The build bot may run in a sandbox: link sandbox lockfile.
pascal@368 2239 ln -s \$LOCAL_REPOSITORY/sandbox/proc/1 \$chroot_dir/proc/1
gokhlayeh@186 2240 }
gokhlayeh@186 2241
gokhlayeh@186 2242 mount_chroot()
gokhlayeh@186 2243 {
gokhlayeh@186 2244 cp -a /etc/resolv.conf \$chroot_dir/etc/resolv.conf
gokhlayeh@194 2245 echo "\$LOCAL_REPOSITORY/packages" > \$chroot_dir\$LOCALSTATE/mirror
gokhlayeh@194 2246 mkdir -p \$chroot_dir\$LOCALSTATE/undigest/\${LOCAL_REPOSITORY##*/}-incoming
gokhlayeh@194 2247 echo "\$LOCAL_REPOSITORY/packages-incoming" > \$chroot_dir\$LOCALSTATE/undigest/\${LOCAL_REPOSITORY##*/}-incoming/mirror
gokhlayeh@194 2248 $( [ "$undigest" ] && echo ' mkdir -p $chroot_dir$LOCALSTATE/undigest/$SLITAZ_VERSION
gokhlayeh@194 2249 echo "$SLITAZ_DIR/$SLITAZ_VERSION/packages" > $chroot_dir$LOCALSTATE/undigest/$SLITAZ_VERSION/mirror' )
gokhlayeh@194 2250 echo -e "\${LOCAL_REPOSITORY##*/}-incoming\nmain" > \$chroot_dir\$LOCALSTATE/priority
gokhlayeh@186 2251 mount -t proc proc \$chroot_dir/proc
gokhlayeh@186 2252 mount -t sysfs sysfs \$chroot_dir/sys
gokhlayeh@186 2253 mount -t devpts devpts \$chroot_dir/dev/pts
gokhlayeh@186 2254 mount -t tmpfs shm \$chroot_dir/dev/shm
gokhlayeh@186 2255 for dir in \$list_dir; do
gokhlayeh@186 2256 mkdir -p \$dir \$chroot_dir\$dir
gokhlayeh@186 2257 mount \$dir \$chroot_dir\$dir
gokhlayeh@186 2258 done
gokhlayeh@186 2259 }
gokhlayeh@186 2260
gokhlayeh@186 2261 umount_chroot()
gokhlayeh@186 2262 {
gokhlayeh@186 2263 for dir in \$list_dir; do
gokhlayeh@186 2264 umount \$chroot_dir\$dir
gokhlayeh@186 2265 done
gokhlayeh@186 2266 umount \$chroot_dir/dev/shm
gokhlayeh@186 2267 umount \$chroot_dir/dev/pts
gokhlayeh@186 2268 umount \$chroot_dir/sys
gokhlayeh@186 2269 umount \$chroot_dir/proc
gokhlayeh@186 2270 }
gokhlayeh@186 2271 EOF
gokhlayeh@186 2272 }
gokhlayeh@186 2273
gokhlayeh@186 2274 ########################################################################
gokhlayeh@186 2275 ######################### END OF NEW FUNCTIONS #########################
gokhlayeh@186 2276 ########################################################################
gokhlayeh@186 2277
paul@430 2278 # List packages providing a virtual package.
pascal@111 2279 whoprovide()
pascal@111 2280 {
pascal@111 2281 local i;
gokhlayeh@195 2282 for i in $(fgrep -l PROVIDE $WOK/*/receipt); do
pascal@111 2283 . $i
pascal@111 2284 case " $PROVIDE " in
pascal@111 2285 *\ $1\ *|*\ $1:*) echo $(basename $(dirname $i));;
pascal@111 2286 esac
pascal@111 2287 done
pascal@111 2288 }
pascal@111 2289
gokhlayeh@186 2290 ########################################################################
gokhlayeh@186 2291 # TAZWOK COMMANDS
gokhlayeh@186 2292 ########################
pankso@7 2293
pankso@7 2294 case "$COMMAND" in
pankso@7 2295 stats)
paul@166 2296 # Tazwok general statistics from the wok config file.
pankso@7 2297 #
gokhlayeh@186 2298 get_tazwok_config
gokhlayeh@186 2299 echo -e "\n\033[1mTazwok configuration statistics\033[0m
pankso@7 2300 ================================================================================
pankso@7 2301 Wok directory : $WOK
pankso@7 2302 Packages repository : $PACKAGES_REPOSITORY
gokhlayeh@186 2303 Incoming repository : $INCOMING_REPOSITORY
pankso@7 2304 Sources repository : $SOURCES_REPOSITORY
gokhlayeh@186 2305 Log directory : $LOCAL_REPOSITORY/log
pankso@7 2306 Packages in the wok : `ls -1 $WOK | wc -l`
pankso@16 2307 Cooked packages : `ls -1 $PACKAGES_REPOSITORY/*.tazpkg 2>/dev/null | wc -l`
gokhlayeh@186 2308 Incoming packages : `ls -1 $INCOMING_REPOSITORY/*.tazpkg 2>/dev/null | wc -l`
gokhlayeh@186 2309 ================================================================================\n"
gokhlayeh@186 2310 ;;
pankso@133 2311 edit)
gokhlayeh@186 2312 get_tazwok_config
pankso@133 2313 check_for_package_on_cmdline
pankso@133 2314 check_for_receipt
gokhlayeh@186 2315 $EDITOR $WOK/$PACKAGE/receipt
gokhlayeh@186 2316 ;;
pascal@98 2317 build-depends)
paul@430 2318 # List dependencies to rebuild wok, or only a package.
gokhlayeh@186 2319 get_tazwok_config
gokhlayeh@215 2320 report(){ : ; }
gokhlayeh@242 2321 if [ ! "$PACKAGE" ] || [ "$PACKAGE" = toolchain ]; then
gokhlayeh@186 2322 scan "$SLITAZ_TOOLCHAIN $SLITAZ_TOOLCHAIN_EXTRA" \
gokhlayeh@186 2323 --look_for=dep --with_dev --with_args
gokhlayeh@186 2324 else
gokhlayeh@186 2325 check_for_package_on_cmdline
gokhlayeh@186 2326 scan $PACKAGE --look_for=bdep --with_dev
gokhlayeh@186 2327 fi
gokhlayeh@186 2328 ;;
gokhlayeh@186 2329 gen-cooklist)
gokhlayeh@215 2330 check_root
gokhlayeh@204 2331 get_options_list="pkg"
gokhlayeh@186 2332 get_tazwok_config
gokhlayeh@215 2333 report(){ : ; }
gokhlayeh@204 2334 if ! [ "$pkg" ]; then
gokhlayeh@242 2335 if [ ! "$LIST" ] || [ "$LIST" = toolchain ]; then
gokhlayeh@242 2336 pkg="$SLITAZ_TOOLCHAIN $SLITAZ_TOOLCHAIN_EXTRA"
gokhlayeh@242 2337 else
gokhlayeh@242 2338 cooklist=${LIST:-$PACKAGES_REPOSITORY/cooklist}
gokhlayeh@242 2339 fi
gokhlayeh@186 2340 fi
gokhlayeh@204 2341 gen_cook_list
gokhlayeh@186 2342 ;;
pascal@119 2343 check-depends)
paul@430 2344 # Check package depends /!\.
gokhlayeh@186 2345 get_tazwok_config
pascal@119 2346 echo ""
paul@121 2347 echo -e "\033[1mCheck every receipt for DEPENDS - doesn't scan ELF files\033[0m
pascal@119 2348 ================================================================================"
pascal@119 2349 TMPDIR=/tmp/tazwok$$
pascal@119 2350 DEFAULT_DEPENDS="glibc-base gcc-lib-base"
pascal@119 2351
paul@430 2352 # Build ALL_DEPENDS variable.
pascal@119 2353 scan_dep()
pascal@119 2354 {
pascal@119 2355 local i
pascal@119 2356 ALL_DEPENDS="$ALL_DEPENDS$PACKAGE "
pascal@128 2357 for i in $DEPENDS $SUGGESTED ; do
pascal@119 2358 case " $ALL_DEPENDS " in
pascal@119 2359 *\ $i\ *) continue;;
pascal@119 2360 esac
pascal@120 2361 [ -d $WOK/$i ] || {
pascal@120 2362 ALL_DEPENDS="$ALL_DEPENDS$i "
pascal@120 2363 continue
pascal@120 2364 }
pascal@128 2365 DEPENDS=""
pascal@128 2366 SUGGESTED=""
pascal@119 2367 . $WOK/$i/receipt
pascal@119 2368 scan_dep
pascal@119 2369 done
pascal@119 2370 }
pankso@133 2371
paul@430 2372 # Check for ELF file.
pascal@119 2373 is_elf()
pascal@119 2374 {
slaxemulator@323 2375 [ "$(dd if=$1 bs=1 skip=1 count=3 2> /dev/null)" = "ELF" ]
pascal@119 2376 }
pascal@119 2377
paul@430 2378 # Print shared library dependencies.
pascal@119 2379 ldd()
pascal@119 2380 {
pascal@130 2381 LD_TRACE_LOADED_OBJECTS=1 /lib/ld*.so $1 2> /dev/null
pascal@119 2382 }
pascal@119 2383
pascal@119 2384 mkdir $TMPDIR
pascal@119 2385 cd $TMPDIR
pascal@140 2386 for i in $LOCALSTATE/files.list.lzma \
pascal@140 2387 $LOCALSTATE/undigest/*/files.list.lzma ; do
pascal@119 2388 [ -f $i ] && lzma d $i -so >> files.list
pascal@119 2389 done
pascal@119 2390 for pkg in $PACKAGES_REPOSITORY/*.tazpkg ; do
pascal@119 2391 tazpkg extract $pkg > /dev/null 2>&1
pascal@119 2392 . */receipt
pascal@119 2393 ALL_DEPENDS="$DEFAULT_DEPENDS "
pascal@119 2394 scan_dep
pascal@119 2395 find */fs -type f | while read file ; do
pascal@119 2396 is_elf $file || continue
pascal@119 2397 case "$file" in
pascal@119 2398 *.o|*.ko|*.ko.gz) continue;;
pascal@119 2399 esac
pascal@119 2400 ldd $file | while read lib rem; do
pascal@119 2401 case "$lib" in
pascal@128 2402 statically|linux-gate.so*|ld-*.so|*/ld-*.so)
pascal@119 2403 continue;;
pascal@119 2404 esac
gokhlayeh@195 2405 for dep in $(fgrep $lib files.list | cut -d: -f1); do
pascal@119 2406 case " $ALL_DEPENDS " in
pascal@119 2407 *\ $dep\ *) continue 2;;
pascal@119 2408 esac
gokhlayeh@195 2409 for vdep in $(fgrep $dep $LOCALSTATE/packages.equiv | cut -d= -f1); do
pascal@128 2410 case " $ALL_DEPENDS " in
pascal@129 2411 *\ $vdep\ *) continue 3;;
pascal@128 2412 esac
pascal@128 2413 done
pascal@119 2414 done
pascal@128 2415 [ -n "$dep" ] || dep="UNKNOWN"
pascal@119 2416 echo "$(basename $pkg): ${file#*fs} depends on package $dep for the shared library $lib"
pascal@119 2417 done
pascal@119 2418 done
pascal@119 2419 rm -rf */
pascal@119 2420 done
pascal@119 2421 cd /tmp
pascal@119 2422 rm -rf $TMPDIR
gokhlayeh@186 2423 ;;
pascal@76 2424 check)
paul@430 2425 # Check wok consistency.
gokhlayeh@186 2426 get_tazwok_config
pascal@76 2427 echo ""
pascal@76 2428 echo -e "\033[1mWok and packages checking\033[0m
pascal@76 2429 ================================================================================"
pascal@77 2430 cd $WOK
pascal@77 2431 for pkg in $(ls)
pascal@76 2432 do
pascal@76 2433 [ -f $pkg/receipt ] || continue
gokhlayeh@186 2434 RECEIPT= $pkg/receipt
gokhlayeh@186 2435 source_receipt
gokhlayeh@186 2436 [ "$PACKAGE" = "$pkg" ] || echo "Package $PACKAGE should be $pkg" >&2
gokhlayeh@186 2437 [ -n "$VERSION" ] || echo "Package $PACKAGE has no VERSION" >&2
gokhlayeh@186 2438 [ -n "$PACKED_SIZE" ] && echo "Package $PACKAGE has hardcoded PACKED_SIZE" >&2
gokhlayeh@186 2439 [ -n "$UNPACKED_SIZE" ] && echo "Package $PACKAGE has hardcoded UNPACKED_SIZE" >&2
gokhlayeh@186 2440 [ -n "$EXTRAVERSION" ] && echo "Package $PACKAGE has hardcoded EXTRAVERSION" >&2
pascal@97 2441 if [ -n "$WANTED" ]; then
pascal@97 2442 if [ ! -f $WANTED/receipt ]; then
gokhlayeh@186 2443 echo "Package $PACKAGE wants unknown $WANTED package" >&2
pascal@97 2444 else
pascal@97 2445 BASEVERSION=$(. $WANTED/receipt ; echo $VERSION)
pascal@103 2446 if [ "$VERSION" = "$WANTED" ]; then
pascal@103 2447 # BASEVERSION is computed in receipt
gokhlayeh@195 2448 fgrep -q '_pkg=' $pkg/receipt &&
pascal@103 2449 BASEVERSION=$VERSION
pascal@103 2450 fi
pascal@97 2451 if [ "$VERSION" != "$BASEVERSION" ]; then
gokhlayeh@186 2452 echo "Package $PACKAGE ($VERSION) wants $WANTED ($BASEVERSION)" >&2
pascal@97 2453 fi
pascal@97 2454 fi
pascal@97 2455 fi
pascal@97 2456
pascal@94 2457 if [ -n "$CATEGORY" ]; then
pascal@94 2458 case " $(echo $CATEGORIES) " in
pascal@94 2459 *\ $CATEGORY\ *);;
gokhlayeh@186 2460 *) echo "Package $PACKAGE has an invalid CATEGORY" >&2;;
pascal@94 2461 esac
pascal@94 2462 else
gokhlayeh@186 2463 echo"Package $PACKAGE has no CATEGORY" >&2
pascal@94 2464 fi
gokhlayeh@186 2465 [ -n "$SHORT_DESC" ] || echo "Package $PACKAGE has no SHORT_DESC" >&2
gokhlayeh@186 2466 [ -n "$MAINTAINER" ] || echo "Package $PACKAGE has no MAINTAINER" >&2
pascal@122 2467 case "$WGET_URL" in
pascal@178 2468 ftp*|http*) busybox wget -s $WGET_URL 2> /dev/null ||
gokhlayeh@186 2469 echo "Package $PACKAGE has a wrong WGET_URL" >&2;;
pascal@122 2470 '') ;;
gokhlayeh@186 2471 *) echo "Package $PACKAGE has an invalid WGET_URL" >&2;;
pascal@122 2472 esac
pascal@112 2473 case "$WEB_SITE" in
pascal@125 2474 ftp*|http*);;
gokhlayeh@186 2475 '') echo "Package $PACKAGE has no WEB_SITE" >&2;;
gokhlayeh@186 2476 *) echo "Package $PACKAGE has an invalid WEB_SITE" >&2;;
pascal@112 2477 esac
pascal@78 2478 case "$MAINTAINER" in
gokhlayeh@186 2479 *\<*|*\>*) echo "Package $PACKAGE has an invalid MAINTAINER: $MAINTAINER" >&2;;
pascal@78 2480 esac
pascal@78 2481 case "$MAINTAINER" in
pascal@78 2482 *@*);;
gokhlayeh@186 2483 *) echo "Package $PACKAGE MAINTAINER is not an email address" >&2;;
pascal@78 2484 esac
gokhlayeh@186 2485 MSG="Missing dependencies for $PACKAGE $VERSION$EXTRAVERSION :\n" >&2
pascal@76 2486 for i in $DEPENDS; do
pascal@76 2487 [ -d $i ] && continue
pascal@111 2488 [ -n "$(whoprovide $i)" ] && continue
pascal@76 2489 echo -e "$MSG $i"
pascal@76 2490 MSG=""
pascal@76 2491 done
gokhlayeh@186 2492 MSG="Missing build dependencies for $PACKAGE $VERSION$EXTRAVERSION :\n" >&2
pascal@92 2493 for i in $BUILD_DEPENDS; do
pascal@92 2494 [ -d $i ] && continue
pascal@111 2495 [ -n "$(whoprovide $i)" ] && continue
pascal@92 2496 echo -e "$MSG $i"
pascal@92 2497 MSG=""
pascal@92 2498 done
paul@430 2499 MSG="Dependency loop between $PACKAGE and :\n"
pascal@76 2500 ALL_DEPS=""
pascal@76 2501 check_for_deps_loop $PACKAGE $DEPENDS
pascal@140 2502 [ -d $WOK/$pkg/taz ] && for i in $BUILD_DEPENDS; do
pascal@141 2503 [ $WOK/$pkg/taz -nt $INSTALLED/$i/files.list ] && continue
paul@154 2504 echo "$pkg should be rebuilt after $i installation"
pascal@140 2505 done
pascal@76 2506 done
gokhlayeh@186 2507 ;;
pankso@7 2508 list)
paul@166 2509 # List packages in wok directory. User can specify a category.
pankso@7 2510 #
gokhlayeh@186 2511 get_tazwok_config
pankso@7 2512 if [ "$2" = "category" ]; then
pankso@7 2513 echo -e "\033[1m\nPackages categories :\033[0m $CATEGORIES\n"
pankso@7 2514 exit 0
pankso@7 2515 fi
pankso@7 2516 # Check for an asked category.
pankso@7 2517 if [ -n "$2" ]; then
pankso@7 2518 ASKED_CATEGORY=$2
pankso@7 2519 echo ""
pankso@7 2520 echo -e "\033[1mPackages in category :\033[0m $ASKED_CATEGORY"
pankso@7 2521 echo "================================================================================"
pankso@7 2522 for pkg in $WOK/*
pankso@7 2523 do
erjo@168 2524 [ ! -f $pkg/receipt ] && continue
pankso@7 2525 . $pkg/receipt
pankso@7 2526 if [ "$CATEGORY" == "$ASKED_CATEGORY" ]; then
pankso@7 2527 echo -n "$PACKAGE"
pankso@28 2528 echo -e "\033[28G $VERSION"
pankso@7 2529 packages=$(($packages+1))
pankso@7 2530 fi
pankso@7 2531 done
pankso@7 2532 echo "================================================================================"
pankso@7 2533 echo -e "$packages packages in category $ASKED_CATEGORY.\n"
pankso@7 2534 else
pankso@7 2535 # By default list all packages and version.
pankso@7 2536 echo ""
pankso@7 2537 echo -e "\033[1mList of packages in the wok\033[0m"
pankso@7 2538 echo "================================================================================"
pankso@7 2539 for pkg in $WOK/*
pankso@7 2540 do
erjo@168 2541 [ ! -f $pkg/receipt ] && continue
pankso@7 2542 . $pkg/receipt
pankso@7 2543 echo -n "$PACKAGE"
pankso@28 2544 echo -en "\033[28G $VERSION"
pankso@7 2545 echo -e "\033[42G $CATEGORY"
pankso@7 2546 packages=$(($packages+1))
pankso@7 2547 done
pankso@7 2548 echo "================================================================================"
MikeDSmith25@82 2549 echo -e "$packages packages available in the wok.\n"
pankso@7 2550 fi
pankso@7 2551 ;;
pankso@7 2552 info)
MikeDSmith25@82 2553 # Information about a package.
pankso@7 2554 #
gokhlayeh@186 2555 get_tazwok_config
pankso@7 2556 check_for_package_on_cmdline
pankso@7 2557 check_for_receipt
pankso@7 2558 . $WOK/$PACKAGE/receipt
pankso@7 2559 echo ""
MikeDSmith25@82 2560 echo -e "\033[1mTazwok package information\033[0m
pankso@7 2561 ================================================================================
pankso@7 2562 Package : $PACKAGE
pankso@7 2563 Version : $VERSION
pankso@7 2564 Category : $CATEGORY
pankso@7 2565 Short desc : $SHORT_DESC
pankso@7 2566 Maintainer : $MAINTAINER"
pankso@7 2567 if [ ! "$WEB_SITE" = "" ]; then
pankso@7 2568 echo "Web site : $WEB_SITE"
pankso@7 2569 fi
pankso@7 2570 if [ ! "$DEPENDS" = "" ]; then
pankso@7 2571 echo "Depends : $DEPENDS"
pankso@7 2572 fi
pankso@7 2573 if [ ! "$WANTED" = "" ]; then
pankso@7 2574 echo "Wanted src : $WANTED"
pankso@7 2575 fi
pankso@7 2576 echo "================================================================================"
pankso@7 2577 echo ""
gokhlayeh@186 2578 ;;
pankso@7 2579 check-log)
pankso@7 2580 # We just cat the file log to view process info.
pankso@7 2581 #
gokhlayeh@186 2582 get_tazwok_config
pankso@7 2583 if [ ! -f "$LOG" ]; then
gokhlayeh@186 2584 echo -e "\nNo process log found. The package is probably not cooked.\n" >&2
gokhlayeh@186 2585 exit 1
pankso@7 2586 else
pankso@7 2587 echo ""
pankso@7 2588 echo -e "\033[1mPackage process log for :\033[0m $PACKAGE"
pankso@7 2589 echo "================================================================================"
pankso@7 2590 cat $LOG
pankso@7 2591 echo "================================================================================"
pankso@7 2592 echo ""
gokhlayeh@237 2593 if [ -s "$WOK/$PACKAGE/warning.txt" ]; then
gokhlayeh@237 2594 echo -e "\033[1mCook warning(s) for :\033[0m $PACKAGE"
gokhlayeh@237 2595 echo "================================================================================"
gokhlayeh@237 2596 cat "$WOK/$PACKAGE/warning.txt"
gokhlayeh@237 2597 echo "================================================================================"
gokhlayeh@237 2598 echo ""
gokhlayeh@237 2599 fi
pankso@7 2600 fi
gokhlayeh@186 2601 ;;
pankso@7 2602 search)
pankso@7 2603 # Search for a package by pattern or name.
pankso@7 2604 #
gokhlayeh@186 2605 get_tazwok_config
pankso@7 2606 if [ -z "$2" ]; then
gokhlayeh@186 2607 echo -e "\nPlease specify a pattern or a package name to search." >&2
gokhlayeh@186 2608 echo -e "Example : 'tazwok search gcc'.\n" >&2
gokhlayeh@186 2609 exit 1
pankso@7 2610 fi
pankso@7 2611 echo ""
pankso@7 2612 echo -e "\033[1mSearch result for :\033[0m $2"
pankso@7 2613 echo "================================================================================"
gokhlayeh@195 2614 list=`ls -1 $WOK | fgrep $2`
pankso@7 2615 for pkg in $list
pankso@7 2616 do
pankso@7 2617 . $WOK/$pkg/receipt
pankso@7 2618 echo -n "$PACKAGE "
pankso@7 2619 echo -en "\033[24G $VERSION"
pankso@7 2620 echo -e "\033[42G $CATEGORY"
gokhlayeh@186 2621 packages=$(($PACKAGEs+1))
pankso@7 2622 done
pankso@7 2623 echo "================================================================================"
pankso@7 2624 echo "$packages packages found for : $2"
pankso@7 2625 echo ""
gokhlayeh@186 2626 ;;
pankso@7 2627 compile)
pankso@7 2628 # Configure and make a package with the receipt.
pankso@7 2629 #
gokhlayeh@186 2630 get_tazwok_config
gokhlayeh@186 2631 source_lib report
gokhlayeh@186 2632 report start
pankso@7 2633 compile_package
gokhlayeh@186 2634 ;;
pankso@7 2635 genpkg)
paul@121 2636 # Generate a package.
pankso@7 2637 #
gokhlayeh@186 2638 get_tazwok_config
gokhlayeh@186 2639 source_lib report
gokhlayeh@186 2640 report start
pankso@7 2641 gen_package
gokhlayeh@186 2642 ;;
pankso@7 2643 cook)
pankso@7 2644 # Compile and generate a package. Just execute tazwok with
pankso@7 2645 # the good commands.
pankso@7 2646 #
pankso@7 2647 check_root
gokhlayeh@186 2648 get_tazwok_config
gokhlayeh@186 2649 source_lib report
gokhlayeh@186 2650 report start
gokhlayeh@215 2651 update_wan_db
gokhlayeh@215 2652 check_for_commit
gokhlayeh@215 2653 [ "$plan_sort_depdb" ] && sort -o $dep_db $dep_db && unset plan_sort_depdb
gokhlayeh@215 2654 [ "$plan_sort_wandb" ] && sort -o $wan_db $wan_db && unset plan_sort_wandb
gokhlayeh@215 2655 if [ "$plan_regen_cookorder" ]; then
gokhlayeh@352 2656 [ "$(sed 1!d $PACKAGES_REPOSITORY/cookorder.txt)" = "#PlanSort" ] || \
gokhlayeh@215 2657 sed 1i"#PlanSort" -i $PACKAGES_REPOSITORY/cookorder.txt
gokhlayeh@215 2658 fi
gokhlayeh@186 2659 cook
gokhlayeh@186 2660 ;;
gokhlayeh@186 2661 sort-cooklist)
gokhlayeh@297 2662 if [ ! -f "$LIST" ]; then
gokhlayeh@297 2663 echo "Usage : tazwok sort-cooklist cooklist" >&2
gokhlayeh@186 2664 exit 1
gokhlayeh@186 2665 fi
gokhlayeh@297 2666 check_root
gokhlayeh@186 2667 get_tazwok_config
gokhlayeh@297 2668 report(){ : ; }
gokhlayeh@297 2669 # When using sort-cooklist, the script should behave as for gen-cooklist
paul@430 2670 # The only difference between these two is where the output is sent.
gokhlayeh@297 2671 COMMAND=gen-cooklist
gokhlayeh@186 2672 cooklist=$LIST
gokhlayeh@297 2673 gen_cook_list
gokhlayeh@300 2674 cp -af $tmp/cooklist $cooklist
gokhlayeh@186 2675 ;;
pankso@7 2676 cook-list)
gokhlayeh@204 2677 # Cook all packages listed in a file or in default cooklist.
gokhlayeh@186 2678 check_root
gokhlayeh@204 2679 get_options_list="pkg forced"
gokhlayeh@186 2680 get_tazwok_config
gokhlayeh@186 2681 source_lib report
gokhlayeh@186 2682 report start
gokhlayeh@204 2683 if ! [ "$pkg" ]; then
gokhlayeh@204 2684 cooklist=${LIST:-$PACKAGES_REPOSITORY/cooklist}
gokhlayeh@186 2685 fi
gokhlayeh@204 2686 gen_cook_list
gokhlayeh@186 2687 cook_list
gokhlayeh@186 2688 ;;
gokhlayeh@186 2689 clean)
paul@430 2690 # Clean up a package work directory + those which want it.
pankso@7 2691 #
gokhlayeh@186 2692 get_tazwok_config
pankso@7 2693 check_for_package_on_cmdline
pankso@7 2694 check_for_receipt
gokhlayeh@186 2695 source_lib report
gokhlayeh@186 2696 report start
pankso@7 2697 . $RECEIPT
gokhlayeh@186 2698 clean
gokhlayeh@186 2699 ;;
pankso@7 2700 gen-clean-wok)
paul@121 2701 # Generate a clean wok from the current wok by copying all receipts
pankso@7 2702 # and stuff directory.
pankso@7 2703 #
gokhlayeh@186 2704 get_tazwok_config
gokhlayeh@186 2705 source_lib report
gokhlayeh@186 2706 report start
gokhlayeh@186 2707 if [ -z "$ARG" ]; then
gokhlayeh@186 2708 echo -e "\nPlease specify the destination for the new clean wok.\n" >&2
gokhlayeh@186 2709 exit 1
pankso@7 2710 else
gokhlayeh@186 2711 dest=$ARG
pankso@7 2712 mkdir -p $dest
pankso@7 2713 fi
gokhlayeh@186 2714 report step "Creating clean wok in : $dest"
pankso@7 2715 for pkg in `ls -1 $WOK`
pankso@7 2716 do
pankso@7 2717 mkdir -p $dest/$pkg
pankso@7 2718 cp -a $WOK/$pkg/receipt $dest/$pkg
gokhlayeh@186 2719 [ -f $WOK/$pkg/description.txt ] && \
gokhlayeh@186 2720 cp -a $WOK/$pkg/description.txt $dest/$pkg
pankso@7 2721 if [ -d "$WOK/$pkg/stuff" ]; then
pankso@7 2722 cp -a $WOK/$pkg/stuff $dest/$pkg
pankso@7 2723 fi
pankso@7 2724 done
gokhlayeh@186 2725 [ -d $WOK/.hg ] && cp -a $WOK/.hg $dest
gokhlayeh@186 2726 report end-step
pankso@7 2727 echo "Packages cleaned : `ls -1 $dest | wc -l`"
pankso@7 2728 echo ""
gokhlayeh@186 2729 ;;
pankso@7 2730 clean-wok)
paul@430 2731 # Clean all packages in the work directory.
pankso@7 2732 #
gokhlayeh@186 2733 get_tazwok_config
gokhlayeh@186 2734 source_lib report
gokhlayeh@186 2735 report start
gokhlayeh@186 2736 report step "Cleaning wok"
gokhlayeh@186 2737 for PACKAGE in `ls -1 $WOK`
pankso@7 2738 do
gokhlayeh@186 2739 set_common_path
gokhlayeh@186 2740 source_receipt
gokhlayeh@186 2741 clean
pankso@7 2742 done
pankso@7 2743 echo "`ls -1 $WOK | wc -l` packages cleaned."
gokhlayeh@186 2744 ;;
gokhlayeh@266 2745 clean-src)
gokhlayeh@266 2746 # Remove tarball unrelated to wok receipts from src repo.
gokhlayeh@266 2747 check_root
gokhlayeh@266 2748 get_options_list="forced"
gokhlayeh@266 2749 get_tazwok_config
gokhlayeh@266 2750 cd $SOURCES_REPOSITORY
gokhlayeh@266 2751 echo -n "Checking $SOURCES_REPOSITORY..."
gokhlayeh@266 2752 for TARBALL in *; do
gokhlayeh@266 2753 [ "$TARBALL" = sources.list ] && continue
gokhlayeh@266 2754 grep -q $'\t'$TARBALL$ $SOURCES_REPOSITORY/sources.list || \
gokhlayeh@266 2755 echo $TARBALL >> $tmp/obsolete
gokhlayeh@266 2756 done
gokhlayeh@266 2757 status
slaxemulator@273 2758 if ! [ -f $tmp/obsolete ]; then
slaxemulator@273 2759 echo "No sources need to be removed."
slaxemulator@273 2760 exit 1
slaxemulator@273 2761 fi
gokhlayeh@266 2762 echo ""
paul@430 2763 echo -e "\033[1mObsolete/unrelated-to-wok sources :\033[0m"
gokhlayeh@266 2764 horizontal_line
gokhlayeh@266 2765 cat $tmp/obsolete
gokhlayeh@266 2766 horizontal_line
gokhlayeh@266 2767 echo "$(wc -l $tmp/obsolete | cut -f1 -d' ') tarballs to remove."
pankso@7 2768 echo ""
paul@430 2769 echo -n "Please confirm before removing (type uppercase YES): "
gokhlayeh@266 2770 read answer
gokhlayeh@266 2771 if [ "$answer" = YES ]; then
gokhlayeh@266 2772 echo -n "Removing old sources..."
gokhlayeh@266 2773 cat $tmp/obsolete | while read i; do
gokhlayeh@266 2774 rm -f $SOURCES_REPOSITORY/$i
gokhlayeh@266 2775 done
gokhlayeh@266 2776 status
gokhlayeh@266 2777 fi
gokhlayeh@266 2778 ;;
pankso@7 2779 gen-list)
gokhlayeh@186 2780 get_tazwok_config
gokhlayeh@204 2781 if [ "$2" ]; then
pankso@7 2782 if [ -d "$2" ]; then
gokhlayeh@204 2783 pkg_repository=$2
pankso@7 2784 else
gokhlayeh@204 2785 echo -e "\nUnable to find directory : $2\n" >&2
gokhlayeh@204 2786 exit 1
pankso@7 2787 fi
pankso@7 2788 fi
gokhlayeh@204 2789
gokhlayeh@186 2790 source_lib report
gokhlayeh@186 2791 report start
gokhlayeh@204 2792 if [ "$pkg_repository" ]; then
gokhlayeh@204 2793 gen_packages_db
gokhlayeh@204 2794 else
gokhlayeh@204 2795 pkg_repository=$PACKAGES_REPOSITORY && gen_packages_db
gokhlayeh@204 2796 pkg_repository=$INCOMING_REPOSITORY && gen_packages_db
pankso@28 2797 fi
gokhlayeh@186 2798 ;;
gokhlayeh@186 2799 check-list)
gokhlayeh@186 2800 # The directory to move into by default is the repository,
gokhlayeh@186 2801 # if $2 is not empty cd into $2.
pascal@178 2802 #
gokhlayeh@186 2803 get_tazwok_config
gokhlayeh@204 2804 if [ "$2" ]; then
pascal@178 2805 if [ -d "$2" ]; then
gokhlayeh@204 2806 pkg_repository=$2
pascal@178 2807 else
gokhlayeh@186 2808 echo -e "\nUnable to find directory : $2\n" >&2
gokhlayeh@186 2809 exit 1
pascal@178 2810 fi
pascal@178 2811 fi
gokhlayeh@186 2812
gokhlayeh@186 2813 source_lib report
gokhlayeh@204 2814 report start
gokhlayeh@204 2815 if [ "$pkg_repository" ]; then
gokhlayeh@204 2816 update_packages_db
gokhlayeh@204 2817 else
gokhlayeh@204 2818 pkg_repository=$PACKAGES_REPOSITORY && update_packages_db
gokhlayeh@204 2819 pkg_repository=$INCOMING_REPOSITORY && update_packages_db
gokhlayeh@204 2820 fi
gokhlayeh@186 2821 ;;
pankso@7 2822 new-tree)
MikeDSmith25@82 2823 # Just create a few directories and generate an empty receipt to prepare
pankso@7 2824 # the creation of a new package.
pankso@7 2825 #
gokhlayeh@186 2826 get_tazwok_config
pankso@7 2827 check_for_package_on_cmdline
slaxemulator@362 2828 clean_wok=$LOCAL_REPOSITORY/clean-wok
slaxemulator@362 2829 if [ -d $clean_wok/$PACKAGE ]; then
gokhlayeh@186 2830 echo -e "\n$PACKAGE package tree already exists.\n" >&2
gokhlayeh@186 2831 exit 1
pankso@7 2832 fi
pankso@7 2833 echo "Creating : $WOK/$PACKAGE"
slaxemulator@362 2834 mkdir $clean_wok/$PACKAGE
slaxemulator@362 2835 cd $clean_wok/$PACKAGE
pankso@7 2836 echo -n "Preparing the receipt..."
pankso@7 2837 #
pankso@7 2838 # Default receipt begin.
pankso@7 2839 #
pankso@7 2840 echo "# SliTaz package receipt." > receipt
pankso@7 2841 echo "" >> receipt
pankso@7 2842 echo "PACKAGE=\"$PACKAGE\"" >> receipt
pankso@7 2843 # Finish the empty receipt.
pankso@7 2844 cat >> receipt << "EOF"
pankso@7 2845 VERSION=""
pankso@7 2846 CATEGORY=""
pankso@7 2847 SHORT_DESC=""
pankso@7 2848 MAINTAINER=""
pankso@7 2849 DEPENDS=""
pankso@7 2850 TARBALL="$PACKAGE-$VERSION.tar.gz"
pankso@7 2851 WEB_SITE=""
pankso@7 2852 WGET_URL=""
pankso@7 2853
pankso@7 2854 # Rules to configure and make the package.
pankso@7 2855 compile_rules()
pankso@7 2856 {
pankso@7 2857 cd $src
gokhlayeh@204 2858 ./configure && make && make install
pankso@7 2859 }
pankso@7 2860
pankso@7 2861 # Rules to gen a SliTaz package suitable for Tazpkg.
pankso@7 2862 genpkg_rules()
pankso@7 2863 {
pankso@7 2864 mkdir -p $fs/usr
pankso@7 2865 cp -a $_pkg/usr/bin $fs/usr
pankso@7 2866 }
pankso@7 2867
pankso@7 2868 EOF
pankso@7 2869 #
pankso@7 2870 # Default receipt end.
pankso@7 2871 #
pankso@7 2872 status
pankso@7 2873 # Interactive mode, asking and seding.
pankso@7 2874 if [ "$3" = "--interactive" ]; then
paul@430 2875 echo "Entering interactive mode..."
pankso@7 2876 echo "================================================================================"
pankso@7 2877 echo "Package : $PACKAGE"
pankso@7 2878 # Version.
pankso@7 2879 echo -n "Version : " ; read anser
pankso@7 2880 sed -i s/'VERSION=\"\"'/"VERSION=\"$anser\""/ receipt
pankso@7 2881 # Category.
pankso@7 2882 echo -n "Category : " ; read anser
pankso@7 2883 sed -i s/'CATEGORY=\"\"'/"CATEGORY=\"$anser\""/ receipt
pankso@7 2884 # Short description.
pankso@7 2885 echo -n "Short desc : " ; read anser
pankso@7 2886 sed -i s/'SHORT_DESC=\"\"'/"SHORT_DESC=\"$anser\""/ receipt
pankso@7 2887 # Maintainer.
pankso@7 2888 echo -n "Maintainer : " ; read anser
pankso@7 2889 sed -i s/'MAINTAINER=\"\"'/"MAINTAINER=\"$anser\""/ receipt
pankso@7 2890 # Web site.
pankso@7 2891 echo -n "Web site : " ; read anser
pankso@133 2892 sed -i s#'WEB_SITE=\"\"'#"WEB_SITE=\"$anser\""# receipt
pankso@7 2893 echo ""
pankso@7 2894 # Wget URL.
pankso@7 2895 echo "Wget URL to download source tarball."
pankso@7 2896 echo "Example : \$GNU_MIRROR/\$PACKAGE/\$TARBALL"
pankso@7 2897 echo -n "Wget url : " ; read anser
pankso@7 2898 sed -i s#'WGET_URL=\"\"'#"WGET_URL=\"$anser\""# receipt
pankso@7 2899 # Ask for a stuff dir.
pankso@7 2900 echo -n "Do you need a stuff directory ? (y/N) : " ; read anser
pankso@7 2901 if [ "$anser" = "y" ]; then
pankso@7 2902 echo -n "Creating the stuff directory..."
pankso@7 2903 mkdir stuff && status
pankso@7 2904 fi
pankso@7 2905 # Ask for a description file.
pankso@7 2906 echo -n "Are you going to write a description ? (y/N) : " ; read anser
pankso@7 2907 if [ "$anser" = "y" ]; then
pankso@7 2908 echo -n "Creating the description.txt file..."
pankso@7 2909 echo "" > description.txt && status
pankso@7 2910 fi
pankso@7 2911 echo "================================================================================"
pankso@7 2912 echo ""
pankso@7 2913 fi
gokhlayeh@186 2914 ;;
pankso@7 2915 remove)
pankso@7 2916 # Remove a package from the wok.
pankso@7 2917 #
gokhlayeh@186 2918 get_tazwok_config
pankso@7 2919 check_for_package_on_cmdline
pankso@7 2920 echo ""
pascal@83 2921 echo -n "Please confirm deletion (y/N) : "; read anser
pascal@83 2922 if [ "$anser" = "y" ]; then
pascal@83 2923 echo -n "Removing $PACKAGE..."
pascal@83 2924 rm -rf $WOK/$PACKAGE && status
pascal@83 2925 echo ""
pascal@83 2926 fi
gokhlayeh@186 2927 ;;
gokhlayeh@304 2928 update-wok)
paul@166 2929 # Pull and update a Hg wok.
gokhlayeh@304 2930 get_options_list="local"
gokhlayeh@186 2931 get_tazwok_config
gokhlayeh@309 2932 source_lib report
gokhlayeh@310 2933 report start
gokhlayeh@304 2934 clean_wok=$LOCAL_REPOSITORY/clean-wok
gokhlayeh@304 2935 cd $clean_wok
gokhlayeh@304 2936 if ! [ "$local" ]; then
gokhlayeh@304 2937 if [ "$WOK_UPDATE_METHOD" = hg ]; then
gokhlayeh@304 2938 if ! [ -f "$INSTALLED/mercurial/receipt" ]; then
gokhlayeh@304 2939
gokhlayeh@304 2940 # Auto-install only if we are in a cook chroot.
gokhlayeh@304 2941 if [ -x /usr/bin/clean-chroot ]; then
gokhlayeh@392 2942 tazpkg get-install mercurial
gokhlayeh@392 2943 else
gokhlayeh@304 2944 echo "" >&2
paul@430 2945 echo "You need to install mercurial to get wok from hg (recommended). Otherwise, you can switch wok get method to \"tarball\" into $LOCAL_REPOSITORY/tazwok.conf (per-repository configuration, if it doesn't exist) or /etc/slitaz/tazwok.conf (global configuration)." | fold -s >&2
gokhlayeh@304 2946 echo "">&2
gokhlayeh@330 2947 exit 1
gokhlayeh@304 2948 fi
gokhlayeh@330 2949 fi
gokhlayeh@304 2950
gokhlayeh@330 2951 report step "Getting wok changes using hg"
gokhlayeh@330 2952 if [ -d .hg ]; then
gokhlayeh@330 2953 hg pull -u || exit 1
gokhlayeh@304 2954 else
gokhlayeh@330 2955 hg clone $HG_WOK . || exit 1
gokhlayeh@304 2956 fi
gokhlayeh@309 2957 report end-step
gokhlayeh@304 2958 [ -x /usr/bin/clean-chroot ] && clean-chroot
gokhlayeh@304 2959 else
gokhlayeh@309 2960 report step "Getting wok changes using tarball"
gokhlayeh@304 2961 { mkdir .tmp && cd .tmp
gokhlayeh@304 2962 wget "$TARBALL_WOK" &&
gokhlayeh@304 2963 case $TARBALL_WOK in
gokhlayeh@304 2964 *bz2) tar xjf *.bz2 -C wok; rm *.bz2;;
gokhlayeh@304 2965 *lzma) unlzma -c *.lzma | tar xf - -C wok; rm *.lzma ;;
gokhlayeh@304 2966 *gz) tar xzf *.gz -C wok; rm*.gz ;;
gokhlayeh@304 2967 esac &&
gokhlayeh@304 2968 rm -r $(ls -d $clean_wok/*) &&
gokhlayeh@304 2969 cp -a wok/* $clean_wok &&
gokhlayeh@304 2970 cd .. &&
gokhlayeh@304 2971 rm -r .tmp
gokhlayeh@304 2972 } || { echo "That's not cool: it fails!" >&2
gokhlayeh@309 2973 report end-step
gokhlayeh@304 2974 exit 1; }
gokhlayeh@309 2975 report end-step
gokhlayeh@304 2976 fi
pankso@106 2977 fi
gokhlayeh@309 2978 report step "Appending changes to wok"
gokhlayeh@304 2979
gokhlayeh@308 2980 # Handle removed files/dir.
gokhlayeh@308 2981 cd $WOK
gokhlayeh@313 2982 for dir in *; do
slaxemulator@329 2983 [ -d "$clean_wok/$dir" ] || rm -rf $dir
gokhlayeh@308 2984 done
gokhlayeh@308 2985 for file in */receipt */description.txt; do
slaxemulator@329 2986 [ -f "$clean_wok/$file" ] || rm -rf $file
gokhlayeh@308 2987 done
gokhlayeh@330 2988 for i in $(find */stuff 2>/dev/null); do
slaxemulator@329 2989 [ -e "$clean_wok/$i" ] || rm -rf $i
gokhlayeh@304 2990 done
gokhlayeh@304 2991
gokhlayeh@308 2992 cp -a $clean_wok/* $WOK
gokhlayeh@309 2993 report end-step
gokhlayeh@186 2994 ;;
pankso@108 2995 maintainers)
gokhlayeh@186 2996 get_tazwok_config
pankso@108 2997 echo ""
pankso@108 2998 echo "List of maintainers for: $WOK"
pankso@108 2999 echo "================================================================================"
pankso@108 3000 touch /tmp/slitaz-maintainers
pankso@108 3001 for pkg in $WOK/*
pankso@108 3002 do
pankso@108 3003 . $pkg/receipt
gokhlayeh@195 3004 if ! fgrep -q "$MAINTAINER" /tmp/slitaz-maintainers; then
pankso@108 3005 echo "$MAINTAINER" >> /tmp/slitaz-maintainers
pankso@108 3006 echo "$MAINTAINER"
pankso@108 3007 fi
pankso@108 3008 done
pankso@108 3009 echo "================================================================================"
pankso@108 3010 echo "Maintainers: `cat /tmp/slitaz-maintainers | wc -l`"
pankso@108 3011 echo ""
pankso@108 3012 # Remove tmp files
gokhlayeh@186 3013 rm -f /tmp/slitaz-maintainers
gokhlayeh@186 3014 ;;
pankso@107 3015 maintained-by)
paul@166 3016 # Search for packages maintained by a contributor.
gokhlayeh@186 3017 get_tazwok_config
pankso@107 3018 if [ ! -n "$2" ]; then
gokhlayeh@186 3019 echo "Specify a name or email of a maintainer." >&2
gokhlayeh@186 3020 exit 1
pankso@107 3021 fi
pankso@107 3022 echo "Maintainer packages"
pankso@107 3023 echo "================================================================================"
pankso@107 3024 for pkg in $WOK/*
pankso@107 3025 do
pankso@107 3026 . $pkg/receipt
gokhlayeh@195 3027 if echo "$MAINTAINER" | fgrep -q "$2"; then
pankso@107 3028 echo "$PACKAGE"
gokhlayeh@186 3029 packages=$(($PACKAGEs+1))
pankso@107 3030 fi
pankso@107 3031 done
pankso@107 3032 echo "================================================================================"
gokhlayeh@186 3033 echo "Packages maintained by $2: $PACKAGEs"
gokhlayeh@186 3034 echo ""
gokhlayeh@186 3035 ;;
gokhlayeh@268 3036 tags)
gokhlayeh@268 3037 get_tazwok_config
gokhlayeh@268 3038 echo -e "\n\033[1mTags list :\033[0m"
gokhlayeh@268 3039 horizontal_line
gokhlayeh@268 3040 cd $WOK
gokhlayeh@268 3041 for i in */receipt; do
gokhlayeh@268 3042 unset TAGS
gokhlayeh@268 3043 source $i
gokhlayeh@268 3044 for t in $TAGS; do
gokhlayeh@268 3045 grep -q ^$t$ $tmp/tags && continue
gokhlayeh@268 3046 echo $t | tee -a $tmp/tags
gokhlayeh@268 3047 done
gokhlayeh@268 3048 done
gokhlayeh@268 3049 horizontal_line
gokhlayeh@268 3050 echo "$(wc -l $tmp/tags | cut -f1 -d ' ') tags listed."
gokhlayeh@268 3051 ;;
erjo@159 3052 check-src)
paul@430 3053 # Verify if upstream package is still available.
erjo@159 3054 #
gokhlayeh@186 3055 get_tazwok_config
erjo@159 3056 check_for_package_on_cmdline
erjo@159 3057 check_for_receipt
gokhlayeh@186 3058 source_receipt
erjo@159 3059 check_src()
erjo@159 3060 {
erjo@159 3061 for url in $@; do
pascal@178 3062 busybox wget -s $url 2>/dev/null && break
erjo@159 3063 done
erjo@159 3064 }
gokhlayeh@186 3065 if [ "$WGET_URL" ];then
erjo@159 3066 echo -n "$PACKAGE : "
erjo@159 3067 check_src $WGET_URL
erjo@159 3068 status
erjo@159 3069 else
erjo@159 3070 echo "No tarball to check for $PACKAGE"
erjo@159 3071 fi
gokhlayeh@186 3072 ;;
gokhlayeh@186 3073 get-src)
gokhlayeh@186 3074 check_root
gokhlayeh@225 3075 get_options_list="target nounpack"
gokhlayeh@186 3076 get_tazwok_config
gokhlayeh@186 3077 check_for_package_on_cmdline
gokhlayeh@186 3078 check_for_receipt
gokhlayeh@186 3079 source_receipt
gokhlayeh@186 3080 if [ "$WGET_URL" ];then
gokhlayeh@186 3081 source_lib report
gokhlayeh@186 3082 report start
gokhlayeh@225 3083 check_for_tarball
gokhlayeh@186 3084 else
gokhlayeh@186 3085 echo "No tarball to download for $PACKAGE"
gokhlayeh@186 3086 fi
gokhlayeh@186 3087 ;;
gokhlayeh@204 3088 check-commit)
gokhlayeh@186 3089 check_root
gokhlayeh@204 3090 get_options_list="missing forced"
gokhlayeh@186 3091 get_tazwok_config
gokhlayeh@186 3092 source_lib report
gokhlayeh@186 3093 report start
gokhlayeh@204 3094 if [ "$forced" ]; then
gokhlayeh@204 3095 rm -f $WOK/*/md5
gokhlayeh@204 3096 unset forced
gokhlayeh@204 3097 fi
gokhlayeh@204 3098 if [ "$missing" ]; then
gokhlayeh@204 3099 pkg=$(ls -1 $WOK)
gokhlayeh@204 3100 else
gokhlayeh@204 3101 pkg="$({ grep ^[a-zA-Z0-9] $PACKAGES_REPOSITORY/packages.txt
gokhlayeh@204 3102 grep ^[a-zA-Z0-9] $INCOMING_REPOSITORY/packages.txt
gokhlayeh@204 3103 } | sort -u)"
gokhlayeh@204 3104 fi
gokhlayeh@204 3105 cooklist=$PACKAGES_REPOSITORY/cooklist
gokhlayeh@186 3106 gen_cook_list
gokhlayeh@186 3107 ;;
gokhlayeh@186 3108 cook-commit)
gokhlayeh@186 3109 check_root
gokhlayeh@204 3110 get_options_list="missing forced"
gokhlayeh@186 3111 get_tazwok_config
gokhlayeh@186 3112 source_lib report
gokhlayeh@186 3113 report start
gokhlayeh@204 3114 if [ "$forced" ]; then
gokhlayeh@204 3115 rm -f $WOK/*/md5
gokhlayeh@204 3116 unset forced
gokhlayeh@204 3117 fi
gokhlayeh@204 3118 if [ "$missing" ]; then
gokhlayeh@204 3119 pkg=$(ls -1 $WOK)
gokhlayeh@204 3120 else
gokhlayeh@204 3121 pkg="$({ grep ^[a-zA-Z0-9] $PACKAGES_REPOSITORY/packages.txt
gokhlayeh@204 3122 grep ^[a-zA-Z0-9] $INCOMING_REPOSITORY/packages.txt
gokhlayeh@204 3123 } | sort -u)"
gokhlayeh@204 3124 fi
gokhlayeh@204 3125 cooklist=$PACKAGES_REPOSITORY/cooklist
gokhlayeh@186 3126 gen_cook_list
gokhlayeh@186 3127 cook_list
gokhlayeh@186 3128 ;;
gokhlayeh@186 3129 cook-all)
gokhlayeh@186 3130 check_root
gokhlayeh@204 3131 get_options_list="forced missing"
gokhlayeh@186 3132 get_tazwok_config
gokhlayeh@186 3133 source_lib report
gokhlayeh@186 3134 report start
gokhlayeh@204 3135 if [ "$missing" ]; then
gokhlayeh@204 3136 pkg=$(ls -1 $WOK)
gokhlayeh@204 3137 else
gokhlayeh@204 3138 pkg="$({ grep ^[a-zA-Z0-9] $PACKAGES_REPOSITORY/packages.txt
gokhlayeh@204 3139 grep ^[a-zA-Z0-9] $INCOMING_REPOSITORY/packages.txt
gokhlayeh@204 3140 } | sort -u)"
gokhlayeh@204 3141 fi
gokhlayeh@204 3142 cooklist=$PACKAGES_REPOSITORY/cooklist
gokhlayeh@204 3143 gen_cook_list
gokhlayeh@186 3144 cook_list
gokhlayeh@186 3145 ;;
gokhlayeh@186 3146 gen-wok-db)
gokhlayeh@186 3147 check_root
gokhlayeh@186 3148 get_tazwok_config
gokhlayeh@186 3149 source_lib report
gokhlayeh@186 3150 report start
gokhlayeh@204 3151 gen_wok_db
gokhlayeh@186 3152 ;;
gokhlayeh@186 3153 report)
gokhlayeh@186 3154 get_tazwok_config
gokhlayeh@186 3155 cd $PACKAGES_REPOSITORY
gokhlayeh@239 3156 if [ "$2" ]; then
gokhlayeh@239 3157 case $2 in
gokhlayeh@239 3158 commit|cooklist|incoming|broken|blocked)
gokhlayeh@239 3159 show="$2"
gokhlayeh@239 3160 ;;
gokhlayeh@239 3161 *)
gokhlayeh@239 3162 echo "usage : tazwok report [commit|cooklist|incoming|broken|blocked]" >&2
gokhlayeh@239 3163 exit 1
gokhlayeh@239 3164 ;;
gokhlayeh@239 3165 esac
gokhlayeh@239 3166 else
gokhlayeh@239 3167 show="commit cooklist incoming broken blocked"
gokhlayeh@239 3168 fi
gokhlayeh@239 3169 for i in $show; do
gokhlayeh@186 3170 if [ -s $i ]; then
gokhlayeh@239 3171 echo ""
gokhlayeh@239 3172 echo -e "\033[1m$i\033[0m"
gokhlayeh@239 3173 echo "================================================================================"
gokhlayeh@239 3174 cat $i
gokhlayeh@239 3175 echo "================================================================================"
gokhlayeh@239 3176 echo ""
gokhlayeh@186 3177 fi
gokhlayeh@186 3178 done
gokhlayeh@186 3179 ;;
gokhlayeh@186 3180 check-incoming)
gokhlayeh@186 3181 check_root
gokhlayeh@214 3182 get_options_list="forced"
gokhlayeh@186 3183 get_tazwok_config
gokhlayeh@186 3184 source_lib report
gokhlayeh@186 3185 report start
gokhlayeh@307 3186 [ -f $LOCAL_RESOSITORY/incoming ] && rm [ -f $LOCAL_REPOSITORY/incoming ]
gokhlayeh@307 3187 report step "Checking $INCOMING_REPOSITORY"
gokhlayeh@307 3188 report open-bloc
gokhlayeh@313 3189 [ -f $LOCAL_REPOSITORY/log/incoming.html ] && rm $LOCAL_REPOSITORY/log/incoming.html
gokhlayeh@307 3190 report sublog $LOCAL_REPOSITORY/log/incoming.html
gokhlayeh@352 3191 echo "incoming" > $LOCAL_REPOSITORY/log/package
gokhlayeh@186 3192 check_for_incoming
gokhlayeh@307 3193 report end-sublog
gokhlayeh@307 3194 report close-bloc
gokhlayeh@186 3195 ;;
gokhlayeh@190 3196 configure-chroot)
gokhlayeh@190 3197 check_root
gokhlayeh@190 3198 get_tazwok_config
gokhlayeh@190 3199 if [ -f /usr/bin/tazchroot ]; then
gokhlayeh@190 3200 cd $LOCAL_REPOSITORY
gokhlayeh@190 3201 configure_tazchroot
gokhlayeh@190 3202 else
paul@430 3203 echo "The package tazchroot needs to be installed" >&2
gokhlayeh@190 3204 exit 1
gokhlayeh@190 3205 fi
gokhlayeh@190 3206 ;;
gokhlayeh@186 3207 chroot)
gokhlayeh@186 3208 check_root
gokhlayeh@186 3209 get_tazwok_config
gokhlayeh@186 3210 # Merge this and the other chroot function ?.
gokhlayeh@186 3211 if [ -f /usr/bin/tazchroot ]; then
gokhlayeh@186 3212 cd $LOCAL_REPOSITORY
gokhlayeh@186 3213 [ ! -f tazchroot.conf ] && configure_tazchroot
gokhlayeh@186 3214 tazchroot
gokhlayeh@186 3215 else
paul@430 3216 echo "The package tazchroot needs to be installed" >&2
gokhlayeh@186 3217 exit 1
gokhlayeh@186 3218 fi
gokhlayeh@186 3219 ;;
gokhlayeh@186 3220 cook-toolchain)
gokhlayeh@186 3221 check_root
gokhlayeh@186 3222 get_tazwok_config
gokhlayeh@186 3223 echo -n "" > $PACKAGES_REPOSITORY/broken
gokhlayeh@186 3224 if [ -f /usr/bin/tazchroot ]; then
gokhlayeh@186 3225 cd $LOCAL_REPOSITORY
gokhlayeh@186 3226 [ ! -f tazchroot.conf ] && configure_tazchroot
gokhlayeh@186 3227 tazchroot cook-toolchain
gokhlayeh@186 3228 # Buggy : chroot can be elsewhere.
gokhlayeh@186 3229 rm -r $LOCAL_REPOSITORY/chroot
paul@430 3230 # /!\ to be written :
gokhlayeh@186 3231 # next rm chroot and plan cook-all by pushing all packages
gokhlayeh@186 3232 # in cooklist.
gokhlayeh@186 3233 else
paul@430 3234 echo "The package tazchroot needs to be installed" >&2
gokhlayeh@186 3235 exit 1
gokhlayeh@186 3236 fi
gokhlayeh@186 3237 ;;
gokhlayeh@235 3238 webserver)
gokhlayeh@235 3239 check_root
gokhlayeh@235 3240 get_tazwok_config
gokhlayeh@235 3241 if [ "$ARG" = on ]; then
gokhlayeh@235 3242 if [ "$WEBSERVER" ] && [ -f "$WEBSERVER/repositories.list" ] && \
gokhlayeh@235 3243 grep -q ^"${undigest:-$SLITAZ_VERSION}"$ $WEBSERVER/repositories.list; then
gokhlayeh@235 3244 echo "Webserver is already enabled at $WEBSERVER for ${undigest:-$SLITAZ_VERSION}." >&2
gokhlayeh@235 3245 exit 1
gokhlayeh@235 3246 fi
gokhlayeh@235 3247 if ! [ -f $LOCAL_REPOSITORY/tazchroot.conf ]; then
gokhlayeh@235 3248 tazwok configure-chroot ${undigest:+--undigest=$undigest} --SLITAZ_VERSION=$SLITAZ_VERSION --SLITAZ_DIR=$SLITAZ_DIR
gokhlayeh@235 3249 fi
gokhlayeh@235 3250 for pkg in php lighttpd; do
gokhlayeh@235 3251 [ -d $INSTALLED/$pkg ] || missing="$missing $pkg"
gokhlayeh@235 3252 done
gokhlayeh@235 3253 if [ "$missing" ]; then
paul@430 3254 echo "You need to install these packages to start webserver: $missing." >&2
gokhlayeh@235 3255 exit 1
gokhlayeh@235 3256 fi
gokhlayeh@235 3257 if [ ! -f "$LOCAL_REPOSITORY/tazwok.conf" ]; then
gokhlayeh@235 3258 echo "Copying /etc/slitaz/tazwok.conf to $LOCAL_REPOSITORY/tazwok.conf: webserver is configured repository-by-repository."
gokhlayeh@235 3259 cp /etc/slitaz/tazwok.conf $LOCAL_REPOSITORY
gokhlayeh@235 3260 fi
gokhlayeh@235 3261 if ! [ "$WEBSERVER" ]; then
gokhlayeh@235 3262 echo -n "Where to store php pages (default: /var/www/vhosts/bb)? "
gokhlayeh@235 3263 read WEBSERVER
gokhlayeh@235 3264 [ "$WEBSERVER" ] || WEBSERVER="/var/www/vhosts/bb"
gokhlayeh@235 3265 fi
gokhlayeh@235 3266 if [ -f "$WEBSERVER/repositories.list" ] && \
gokhlayeh@235 3267 grep -q ^"${undigest:-$SLITAZ_VERSION}"$ $WEBSERVER/repositories.list; then
gokhlayeh@235 3268 echo "Webserver is already enabled at $WEBSERVER for ${undigest:-$SLITAZ_VERSION}." >&2
gokhlayeh@235 3269 exit 1
gokhlayeh@235 3270 fi
gokhlayeh@235 3271 mkdir -p $WEBSERVER
gokhlayeh@235 3272 echo "${undigest:-$SLITAZ_VERSION}" >> $WEBSERVER/repositories.list
gokhlayeh@267 3273 for file in index.php log.php download.php; do
gokhlayeh@235 3274 [ -f "$WEBSERVER/$file" ] || ln -s /usr/share/slitaz/web-bb/$file $WEBSERVER
gokhlayeh@235 3275 done
gokhlayeh@267 3276 for dir in $PACKAGES_REPOSITORY $INCOMING_REPOSITORY; do
gokhlayeh@267 3277 ln -s $dir $WEBSERVER/${undigest:-$SLITAZ_VERSION}-${dir##*/}
gokhlayeh@267 3278 done
gokhlayeh@235 3279 source $LOCAL_REPOSITORY/tazchroot.conf
gokhlayeh@235 3280 echo "<?php
gokhlayeh@235 3281
gokhlayeh@235 3282 // Web interface configuration
gokhlayeh@235 3283
gokhlayeh@235 3284 \$version=\"${undigest:-$SLITAZ_VERSION}\";
gokhlayeh@235 3285 \$chroot=\"$chroot_dir\";
pascal@360 3286 \$lockfile=\"\$chroot/proc/1/status\";
gokhlayeh@235 3287 \$db_dir=\"$PACKAGES_REPOSITORY\";
gokhlayeh@235 3288 \$log_dir=\"$LOCAL_REPOSITORY/log\";
gokhlayeh@235 3289 \$packages=\"$PACKAGES_REPOSITORY\";
gokhlayeh@235 3290 \$incoming=\"$INCOMING_REPOSITORY\";
gokhlayeh@251 3291 \$wok=\"$WOK\";
gokhlayeh@235 3292
gokhlayeh@235 3293 ?>" > $WEBSERVER/conf-${undigest:-$SLITAZ_VERSION}.php
gokhlayeh@235 3294 [ -L "$WEBSERVER/web" ] || ln -s /usr/share/slitaz/web $WEBSERVER
gokhlayeh@235 3295 echo "WEBSERVER=\"$WEBSERVER\"" >> $LOCAL_REPOSITORY/tazwok.conf
gokhlayeh@235 3296 if [ -L "$WEBSERVER/conf.php" ]; then
paul@430 3297 echo "Do you want to make ${undigest:-$SLITAZ_VERSION} the default page (y/N) ? "
gokhlayeh@235 3298 read answer
gokhlayeh@235 3299 if [ "$answer" = y ]; then
gokhlayeh@235 3300 rm $WEBSERVER/conf.php
gokhlayeh@235 3301 ln -s $WEBSERVER/conf-${undigest:-$SLITAZ_VERSION}.php $WEBSERVER/conf.php
gokhlayeh@235 3302 fi
gokhlayeh@235 3303 else
gokhlayeh@235 3304 ln -s $WEBSERVER/conf-${undigest:-$SLITAZ_VERSION}.php $WEBSERVER/conf.php
gokhlayeh@235 3305 fi
gokhlayeh@235 3306 elif [ "$ARG" = off ]; then
gokhlayeh@235 3307 if ! [ "$WEBSERVER" ]; then
gokhlayeh@235 3308 echo "No webserver running for ${undigest:-$SLITAZ_VERSION}" >&2
gokhlayeh@235 3309 exit 1
gokhlayeh@235 3310 fi
gokhlayeh@235 3311 sed '/^WEBSERVER/d' -i $LOCAL_REPOSITORY/tazwok.conf
gokhlayeh@235 3312 sed "/^${undigest:-$SLITAZ_VERSION}$/d" -i $WEBSERVER/repositories.list
gokhlayeh@235 3313 rm $WEBSERVER/conf-${undigest:-$SLITAZ_VERSION}.php
gokhlayeh@267 3314 for dir in $PACKAGES_REPOSITORY $INCOMING_REPOSITORY; do
gokhlayeh@267 3315 rm $WEBSERVER/${undigest:-$SLITAZ_VERSION}-${dir##*/}
gokhlayeh@267 3316 done
gokhlayeh@235 3317 if ! [ -s "$WEBSERVER/repositories.list" ]; then
paul@430 3318 echo "$WEBSERVER/repositories.list is empty; tazwok doesn't remove the server automatically in case you have important stuff in it. If that's not the case, you can remove it using: rm -r $WEBSERVER"
gokhlayeh@235 3319 rm $WEBSERVER/conf.php
gokhlayeh@235 3320 elif [ "$(readlink $WEBSERVER/conf.php)" = "$WEBSERVER/conf-${undigest:-$SLITAZ_VERSION}.php" ]; then
gokhlayeh@235 3321 echo "${undigest:-$SLITAZ_VERSION} was the default version to use; switched to : $(sed 1!d $WEBSERVER/repositories.list)"
gokhlayeh@235 3322 rm $WEBSERVER/conf.php
gokhlayeh@235 3323 ln -s $WEBSERVER/conf-$(sed 1!d $WEBSERVER/repositories.list).php $WEBSERVER/conf.php
gokhlayeh@235 3324 fi
gokhlayeh@235 3325 else
gokhlayeh@235 3326 echo "Usage: tazwok webserver on/off" >&2
gokhlayeh@235 3327 exit 1
gokhlayeh@235 3328 fi
gokhlayeh@235 3329 ;;
pankso@354 3330 block)
pankso@354 3331 # Add a pkg name to the list of blocked packages.
gokhlayeh@367 3332 get_tazwok_config
gokhlayeh@367 3333 check_root
gokhlayeh@367 3334 check_for_package_on_cmdline
gokhlayeh@367 3335 if ! [ -f $WOK/$PACKAGE/receipt ]; then
paul@430 3336 echo "Can't find $PACKAGE in wok." >&2
gokhlayeh@367 3337 echo ""
gokhlayeh@367 3338 exit 1
gokhlayeh@367 3339 fi
pankso@354 3340 echo ""
gokhlayeh@367 3341 if grep -qs "^$PACKAGE$" $PACKAGES_REPOSITORY/blocked; then
gokhlayeh@367 3342 echo "$PACKAGE is already in the blocked packages list." >&2
gokhlayeh@367 3343 echo ""
gokhlayeh@367 3344 exit 1
pankso@354 3345 else
gokhlayeh@367 3346 echo -n "Adding $PACKAGE to : $PACKAGES_REPOSITORY/blocked... "
gokhlayeh@367 3347 echo "$PACKAGE" >> $PACKAGES_REPOSITORY/blocked
gokhlayeh@367 3348 status
gokhlayeh@367 3349 if grep -q "^$PACKAGE$" $PACKAGES_REPOSITORY/cooklist; then
gokhlayeh@367 3350 echo -n "Removing $PACKAGE from : $PACKAGES_REPOSITORY/cooklist... "
gokhlayeh@367 3351 sed -i /"^$PACKAGE$"/d $PACKAGES_REPOSITORY/cooklist
gokhlayeh@367 3352 status
pankso@354 3353 fi
pankso@354 3354 fi
pankso@354 3355 echo "" ;;
pankso@354 3356 unblock)
pankso@354 3357 # Remove a pkg name from the list of blocked packages.
gokhlayeh@367 3358 get_tazwok_config
gokhlayeh@367 3359 check_root
gokhlayeh@367 3360 check_for_package_on_cmdline
gokhlayeh@367 3361 if ! [ -f $WOK/$PACKAGE/receipt ]; then
paul@430 3362 echo "Can't find $PACKAGE in wok." >&2
gokhlayeh@367 3363 echo ""
gokhlayeh@367 3364 exit 1
gokhlayeh@367 3365 fi
pankso@354 3366 echo ""
gokhlayeh@367 3367 if grep -qs "^$PACKAGE$" $PACKAGES_REPOSITORY/blocked; then
gokhlayeh@367 3368 echo -n "Removing $PACKAGE from : $PACKAGES_REPOSITORY/blocked... "
gokhlayeh@367 3369 sed -i /"^$PACKAGE$"/d $PACKAGES_REPOSITORY/blocked
gokhlayeh@367 3370 sed -i '/^$/d' $PACKAGES_REPOSITORY/blocked
gokhlayeh@367 3371 status
pankso@354 3372 else
gokhlayeh@367 3373 echo "$PACKAGE is not in the blocked packages list." >&2
gokhlayeh@367 3374 echo ""
gokhlayeh@367 3375 exit 1
pankso@354 3376 fi
pankso@354 3377 echo "" ;;
pankso@7 3378 usage|*)
MikeDSmith25@82 3379 # Print usage also for all unknown commands.
pankso@7 3380 #
pankso@7 3381 usage
gokhlayeh@186 3382 ;;
pankso@7 3383 esac
pankso@7 3384
gokhlayeh@313 3385 report stop 2>/dev/null
pankso@7 3386 exit 0