spk annotate lib/libspk.sh @ rev 52
libspk.sh: full_package can be more efficient
author | Christophe Lincoln <pankso@slitaz.org> |
---|---|
date | Thu May 17 10:07:40 2012 +0200 (2012-05-17) |
parents | e7b29fd4da64 |
children | 917a909ee92b |
rev | line source |
---|---|
pankso@5 | 1 #!/bin/sh |
pankso@5 | 2 # |
paul@12 | 3 # Libspk - The Spk base function and internal variables used by almost all |
pankso@5 | 4 # spk-tools. Read the README before adding or modifing any code in spk! |
pankso@5 | 5 # |
pankso@5 | 6 # Copyright (C) SliTaz GNU/Linux - BSD License |
pankso@5 | 7 # Author: See AUTHORS files |
pankso@5 | 8 # |
pankso@5 | 9 . /lib/libtaz.sh |
pankso@5 | 10 . /usr/lib/slitaz/libpkg.sh |
pankso@5 | 11 . /etc/slitaz/slitaz.conf |
pankso@5 | 12 |
pankso@5 | 13 # Internal variables. |
pankso@17 | 14 mirrorurl="${root}${PKGS_DB}/mirror" |
pankso@17 | 15 installed="${root}${PKGS_DB}/installed" |
pankso@17 | 16 pkgsdesc="${root}${PKGS_DB}/packages.desc" |
pankso@32 | 17 pkgsmd5="${root}${PKGS_DB}/packages.$SUM" |
meshca@11 | 18 # ????do we need packages.equiv???? |
pankso@19 | 19 blocked="${root}${PKGS_DB}/blocked.list" |
pankso@17 | 20 activity="${root}${PKGS_DB}/activity" |
pankso@5 | 21 |
pankso@5 | 22 # |
pankso@19 | 23 # Sanity checks |
pankso@19 | 24 # |
pankso@19 | 25 |
pankso@19 | 26 if [ ! -d "${root}${PKGS_DB}" ]; then |
pankso@19 | 27 gettext "Can't find DB:"; echo " ${root}${PKGS_DB}" |
pankso@19 | 28 exit 1 |
pankso@19 | 29 fi |
pankso@19 | 30 |
pankso@19 | 31 # |
pankso@5 | 32 # Functions |
pankso@18 | 33 # |
meshca@11 | 34 |
pankso@14 | 35 # Display receipt information. Expects a receipt to be sourced |
pankso@5 | 36 receipt_info() { |
pankso@5 | 37 cat << EOT |
pankso@5 | 38 $(gettext "Version :") ${VERSION}${EXTRAVERSION} |
pankso@5 | 39 $(gettext "Short desc :") $SHORT_DESC |
pankso@5 | 40 $(gettext "Category :") $CATEGORY |
pankso@5 | 41 EOT |
pankso@5 | 42 } |
pankso@5 | 43 |
meshca@9 | 44 # Extract receipt from tazpkg |
meshca@9 | 45 # Parameters: result_dir package_file |
meshca@9 | 46 extract_receipt() { |
meshca@9 | 47 local dir="$1" |
meshca@9 | 48 local file="$2" |
pankso@26 | 49 cd "$dir" |
meshca@9 | 50 { cpio --quiet -i receipt > /dev/null 2>&1; } < $file |
pankso@26 | 51 cd - >/dev/null |
meshca@9 | 52 } |
meshca@9 | 53 |
pankso@5 | 54 # Used by: list |
pankso@5 | 55 count_installed() { |
pankso@18 | 56 local count=$(ls $installed | wc -l) |
pankso@19 | 57 gettext "Installed :"; echo " $count" |
pankso@5 | 58 } |
pankso@5 | 59 |
pankso@5 | 60 # Used by: list |
pankso@5 | 61 count_mirrored() { |
meshca@9 | 62 local count=$(cat $pkgsmd5 | wc -l) |
pankso@19 | 63 gettext "Mirrored :"; echo " $count" |
pankso@5 | 64 } |
meshca@9 | 65 |
meshca@11 | 66 is_package_mirrored() { |
pankso@14 | 67 local name=$1 |
pankso@52 | 68 local occurance=$(fgrep "$name |" $pkgsdesc) |
meshca@11 | 69 [ -n "$occurance" ] |
meshca@11 | 70 } |
meshca@11 | 71 |
meshca@11 | 72 # Download a file trying all mirrors |
meshca@11 | 73 # Parameters: package/file |
meshca@11 | 74 download() { |
meshca@11 | 75 local package=$1 |
meshca@11 | 76 local mirror="$(cat $mirrorurl)" |
meshca@11 | 77 case "$package" in |
meshca@11 | 78 *.tazpkg) |
meshca@11 | 79 echo "${mirror%/}/$package" |
pankso@14 | 80 wget -c ${mirror%/}/$package ;; |
meshca@11 | 81 esac |
pankso@50 | 82 if [ ! -f "$package" ]; then |
pankso@52 | 83 gettext "ERROR: Missing package $package"; newline |
pankso@52 | 84 newline && exit 1 |
pankso@50 | 85 fi |
meshca@11 | 86 } |
meshca@11 | 87 |
pankso@19 | 88 # Assume package name is valid |
meshca@11 | 89 full_package() { |
pankso@52 | 90 IFS="|" |
pankso@52 | 91 local line="$(grep "^$1 |" $pkgsdesc)" |
pankso@52 | 92 echo $line | busybox awk '{print $1 "-" $2}' |
pankso@52 | 93 unset IFS |
meshca@11 | 94 } |
meshca@11 | 95 |
meshca@11 | 96 # Check if a package is already installed. |
pankso@27 | 97 # Usage: check_installed package |
pankso@27 | 98 check_installed() { |
pankso@14 | 99 local name="$1" |
pankso@18 | 100 if [ -d "$installed/$name" ]; then |
pankso@30 | 101 echo $(boldify "$name") $(gettext "package is already installed") |
pankso@28 | 102 continue |
meshca@11 | 103 fi |
meshca@11 | 104 } |
meshca@11 | 105 |
meshca@11 | 106 # get an already installed package from packages.equiv TODO REDO! |
meshca@9 | 107 equivalent_pkg() { |
pankso@14 | 108 for i in $(grep -hs "^$1=" ${root}${PKGS_DB}/packages.equiv \ |
pankso@14 | 109 ${root}${PKGS_DB}/undigest/*/packages.equiv | sed "s/^$1=//") |
meshca@9 | 110 do |
meshca@9 | 111 if echo $i | fgrep -q : ; then |
meshca@9 | 112 # format 'alternative:newname' |
meshca@9 | 113 # if alternative is installed then substitute newname |
pankso@18 | 114 if [ -f $installed/${i%:*}/receipt ]; then |
meshca@9 | 115 # substitute package dependancy |
meshca@9 | 116 echo ${i#*:} |
meshca@9 | 117 return |
meshca@9 | 118 fi |
meshca@9 | 119 else |
meshca@9 | 120 # if alternative is installed then nothing to install |
pankso@18 | 121 if [ -f $installed/$i/receipt ]; then |
meshca@9 | 122 # substitute installed package |
meshca@9 | 123 echo $i |
meshca@9 | 124 return |
meshca@9 | 125 fi |
meshca@9 | 126 fi |
meshca@9 | 127 done |
meshca@9 | 128 # if not found in packages.equiv then no substitution |
meshca@9 | 129 echo $1 |
meshca@9 | 130 } |
meshca@9 | 131 |
meshca@9 | 132 # Check for missing deps listed in a receipt packages. |
meshca@9 | 133 # Parameters: package dependencies |
meshca@9 | 134 missing_deps() { |
meshca@9 | 135 local package="$1" |
meshca@9 | 136 shift 1 |
meshca@9 | 137 local depends="$@" |
pankso@10 | 138 |
meshca@9 | 139 local deps=0 |
meshca@9 | 140 local missing |
pankso@10 | 141 |
paul@12 | 142 # Calculate missing dependencies |
meshca@9 | 143 for pkgorg in $depends; do |
meshca@9 | 144 local pkg=$(equivalent_pkg $pkgorg) |
pankso@18 | 145 if [ ! -d "$installed/$pkg" ]; then |
pankso@30 | 146 gettext "Missing:"; echo " $pkg" |
meshca@9 | 147 deps=$(($deps+1)) |
pankso@18 | 148 elif [ ! -f "$installed/$pkg/receipt" ]; then |
pankso@39 | 149 gettext "WARNING: Dependency loop between \$package and \$pkg."; newline |
meshca@9 | 150 fi |
meshca@9 | 151 done |
pankso@14 | 152 |
pankso@39 | 153 gettext "Missing dependendcies:"; echo " $(colorize "$deps" 34)" |
pankso@10 | 154 |
meshca@9 | 155 # Return true if missing deps |
meshca@9 | 156 [ "$deps" != "0" ] |
meshca@9 | 157 } |
meshca@11 | 158 |
meshca@11 | 159 grepesc() { |
meshca@11 | 160 sed 's/\[/\\[/g' |
meshca@11 | 161 } |
meshca@11 | 162 |
pankso@27 | 163 # Check for ELF file |
pankso@27 | 164 is_elf() { |
pankso@27 | 165 [ "$(dd if=$1 bs=1 skip=1 count=3 2> /dev/null)" = "ELF" ] |
pankso@27 | 166 } |