tazwok annotate tazwok @ rev 255

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