tazwok annotate tazwok @ rev 263

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