tazwok annotate tazwok @ rev 461

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