tazwok annotate tazwok @ rev 464

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