tazwok annotate tazwok @ rev 468

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