spk view lib/libspk.sh @ rev 55

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