spk annotate lib/libspk.sh @ rev 30
spk-add: some colors, improvments, usage
author | Christophe Lincoln <pankso@slitaz.org> |
---|---|
date | Tue May 15 19:35:44 2012 +0200 (2012-05-15) |
parents | 19f1b93fd7d8 |
children | bb5a37f13ad6 |
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@17 | 17 pkgsmd5="${root}${PKGS_DB}/packages.md5" |
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@14 | 68 local occurance=$(cat $pkgsdesc | grep "$name ") |
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 |
meshca@11 | 82 } |
meshca@11 | 83 |
pankso@19 | 84 # Assume package name is valid |
meshca@11 | 85 # There may be a more efficient way to do this... |
meshca@11 | 86 full_package() { |
pankso@14 | 87 local name=$1 |
pankso@14 | 88 local occurance=$(cat $pkgsdesc | grep "$name ") |
meshca@11 | 89 local count=0 |
meshca@11 | 90 for i in $(echo $occurance | tr "|" "\n"); do |
meshca@11 | 91 if [ $count -eq 1 ]; then |
pankso@14 | 92 echo $name-$i && return |
meshca@11 | 93 fi |
meshca@11 | 94 count=$(($count+1)) |
meshca@11 | 95 done |
meshca@11 | 96 } |
meshca@11 | 97 |
meshca@11 | 98 # Check if a package is already installed. |
pankso@27 | 99 # Usage: check_installed package |
pankso@27 | 100 check_installed() { |
pankso@14 | 101 local name="$1" |
pankso@18 | 102 if [ -d "$installed/$name" ]; then |
pankso@30 | 103 echo $(boldify "$name") $(gettext "package is already installed") |
pankso@28 | 104 continue |
meshca@11 | 105 fi |
meshca@11 | 106 } |
meshca@11 | 107 |
meshca@11 | 108 # get an already installed package from packages.equiv TODO REDO! |
meshca@9 | 109 equivalent_pkg() { |
pankso@14 | 110 for i in $(grep -hs "^$1=" ${root}${PKGS_DB}/packages.equiv \ |
pankso@14 | 111 ${root}${PKGS_DB}/undigest/*/packages.equiv | sed "s/^$1=//") |
meshca@9 | 112 do |
meshca@9 | 113 if echo $i | fgrep -q : ; then |
meshca@9 | 114 # format 'alternative:newname' |
meshca@9 | 115 # if alternative is installed then substitute newname |
pankso@18 | 116 if [ -f $installed/${i%:*}/receipt ]; then |
meshca@9 | 117 # substitute package dependancy |
meshca@9 | 118 echo ${i#*:} |
meshca@9 | 119 return |
meshca@9 | 120 fi |
meshca@9 | 121 else |
meshca@9 | 122 # if alternative is installed then nothing to install |
pankso@18 | 123 if [ -f $installed/$i/receipt ]; then |
meshca@9 | 124 # substitute installed package |
meshca@9 | 125 echo $i |
meshca@9 | 126 return |
meshca@9 | 127 fi |
meshca@9 | 128 fi |
meshca@9 | 129 done |
meshca@9 | 130 # if not found in packages.equiv then no substitution |
meshca@9 | 131 echo $1 |
meshca@9 | 132 } |
meshca@9 | 133 |
meshca@9 | 134 # Check for missing deps listed in a receipt packages. |
meshca@9 | 135 # Parameters: package dependencies |
meshca@9 | 136 missing_deps() { |
meshca@9 | 137 local package="$1" |
meshca@9 | 138 shift 1 |
meshca@9 | 139 local depends="$@" |
pankso@10 | 140 |
meshca@9 | 141 local deps=0 |
meshca@9 | 142 local missing |
pankso@10 | 143 |
paul@12 | 144 # Calculate missing dependencies |
meshca@9 | 145 for pkgorg in $depends; do |
meshca@9 | 146 local pkg=$(equivalent_pkg $pkgorg) |
pankso@18 | 147 if [ ! -d "$installed/$pkg" ]; then |
pankso@30 | 148 gettext "Missing:"; echo " $pkg" |
meshca@9 | 149 deps=$(($deps+1)) |
pankso@18 | 150 elif [ ! -f "$installed/$pkg/receipt" ]; then |
meshca@9 | 151 gettext "WARNING Dependency loop between \$package and \$pkg."; newline |
meshca@9 | 152 fi |
meshca@9 | 153 done |
meshca@11 | 154 if [ $deps -gt 0 ]; then |
meshca@11 | 155 echo $deps $(gettext "missing package(s) to install.") |
meshca@11 | 156 fi |
pankso@14 | 157 |
pankso@30 | 158 echo -n "$(colorize "$deps" 34) " |
pankso@30 | 159 gettext "missing dep(s) to install."; newline |
pankso@10 | 160 |
meshca@9 | 161 # Return true if missing deps |
meshca@9 | 162 [ "$deps" != "0" ] |
meshca@9 | 163 } |
meshca@11 | 164 |
meshca@11 | 165 grepesc() { |
meshca@11 | 166 sed 's/\[/\\[/g' |
meshca@11 | 167 } |
meshca@11 | 168 |
pankso@27 | 169 # Check for ELF file |
pankso@27 | 170 is_elf() { |
pankso@27 | 171 [ "$(dd if=$1 bs=1 skip=1 count=3 2> /dev/null)" = "ELF" ] |
pankso@27 | 172 } |