tazwok annotate tazwok @ rev 480

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