tazwok annotate tazwok @ rev 540

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