| @@ -1,936 +1,942 @@ | | | @@ -1,936 +1,942 @@ |
1 | #!@SH@ -e | | 1 | #!@SH@ -e |
2 | # | | 2 | # |
3 | # $Id: pkg_chk.sh,v 1.65 2009/07/22 21:56:13 sketch Exp $ | | 3 | # $Id: pkg_chk.sh,v 1.66 2012/05/13 13:43:59 abs Exp $ |
4 | # | | 4 | # |
5 | # TODO: Make -g check dependencies and tsort | | 5 | # TODO: Make -g check dependencies and tsort |
6 | # TODO: Make -g list user-installed packages first, followed by commented | | 6 | # TODO: Make -g list user-installed packages first, followed by commented |
7 | # out automatically installed packages | | 7 | # out automatically installed packages |
8 | # TODO: List user-installed packages that are not in config | | 8 | # TODO: List user-installed packages that are not in config |
9 | | | 9 | |
10 | PATH=${PATH}:/usr/sbin:/usr/bin | | 10 | PATH=${PATH}:/usr/sbin:/usr/bin |
11 | | | 11 | |
12 | SUMMARY_FILE=pkg_summary.gz | | 12 | SUMMARY_FILE=pkg_summary.gz |
13 | OLD_SUMMARY_FILE=pkg_chk-summary | | 13 | OLD_SUMMARY_FILE=pkg_chk-summary |
14 | | | 14 | |
15 | is_binary_available() | | 15 | is_binary_available() |
16 | { | | 16 | { |
17 | if [ -n "$PKGDB" ]; then | | 17 | if [ -n "$PKGDB" ]; then |
18 | for iba_pkg in $PKGDB; do | | 18 | for iba_pkg in $PKGDB; do |
19 | case $iba_pkg in | | 19 | case $iba_pkg in |
20 | *:"$1") | | 20 | *:"$1") |
21 | return 0; | | 21 | return 0; |
22 | ;; | | 22 | ;; |
23 | esac | | 23 | esac |
24 | done | | 24 | done |
25 | return 1; | | 25 | return 1; |
26 | else | | 26 | else |
27 | if [ -f "$PACKAGES/$1$PKG_SUFX" ]; then | | 27 | if [ -f "$PACKAGES/$1$PKG_SUFX" ]; then |
28 | return 0; | | 28 | return 0; |
29 | else | | 29 | else |
30 | return 1; | | 30 | return 1; |
31 | fi | | 31 | fi |
32 | fi | | 32 | fi |
33 | } | | 33 | } |
34 | | | 34 | |
35 | bin_pkg_info2pkgdb() | | 35 | bin_pkg_info2pkgdb() |
36 | { | | 36 | { |
37 | ${AWK} '/^PKGNAME=/ {sub("^PKGNAME=", ""); PKGNAME=$0} \ | | 37 | ${AWK} '/^PKGNAME=/ {sub("^PKGNAME=", ""); PKGNAME=$0} \ |
38 | /^PKGPATH=/ {sub("^PKGPATH=", ""); printf("%s:%s ", $0, PKGNAME)}' | | 38 | /^PKGPATH=/ {sub("^PKGPATH=", ""); printf("%s:%s ", $0, PKGNAME)}' |
39 | } | | 39 | } |
40 | | | 40 | |
41 | check_packages_installed() | | 41 | check_packages_installed() |
42 | { | | 42 | { |
43 | MISSING_TODO= | | 43 | MISSING_TODO= |
44 | MISMATCH_TODO= | | 44 | MISMATCH_TODO= |
45 | | | 45 | |
46 | for pkgdir in $* ; do | | 46 | for pkgdir in $* ; do |
47 | | | 47 | |
48 | if [ -n "$opt_B" ];then | | 48 | if [ -n "$opt_B" ];then |
49 | extract_pkg_vars $pkgdir PKGNAME FILESDIR PKGDIR DISTINFO_FILE PATCHDIR | | 49 | extract_pkg_vars $pkgdir PKGNAME FILESDIR PKGDIR DISTINFO_FILE PATCHDIR |
50 | elif [ -n "$opt_s" ] ; then | | 50 | elif [ -n "$opt_s" ] ; then |
51 | extract_pkg_vars $pkgdir PKGNAME | | 51 | extract_pkg_vars $pkgdir PKGNAME |
52 | else | | 52 | else |
53 | PKGNAME=`pkgdir2pkgname $pkgdir` | | 53 | PKGNAME=`pkgdir2pkgname $pkgdir` |
54 | fi | | 54 | fi |
55 | if [ -z "$PKGNAME" ]; then | | 55 | if [ -z "$PKGNAME" ]; then |
56 | MISS_DONE=$MISS_DONE" "$pkgdir | | 56 | MISS_DONE=$MISS_DONE" "$pkgdir |
57 | continue | | 57 | continue |
58 | fi | | 58 | fi |
59 | if [ ! -d $PKG_DBDIR/$PKGNAME ];then | | 59 | if [ ! -d $PKG_DBDIR/$PKGNAME ];then |
60 | msg_n "$pkgdir - " | | 60 | msg_n "$pkgdir - " |
61 | pkg=$(echo $PKGNAME | ${SED} 's/-[0-9].*//') | | 61 | pkg=$(echo $PKGNAME | ${SED} 's/-[0-9].*//') |
62 | pkginstalled=$(sh -c "${PKG_INFO} -e $pkg" || true) | | 62 | pkginstalled=$(sh -c "${PKG_INFO} -e $pkg" || true) |
63 | INSTALL= | | 63 | INSTALL= |
64 | if [ -n "$pkginstalled" ];then | | 64 | if [ -n "$pkginstalled" ];then |
65 | msg_n "$pkginstalled < $PKGNAME" | | 65 | msg_n "$pkginstalled < $PKGNAME" |
66 | MISMATCH_TODO="$MISMATCH_TODO $pkginstalled" | | 66 | MISMATCH_TODO="$MISMATCH_TODO $pkginstalled" |
67 | else | | 67 | else |
68 | msg_n "$PKGNAME missing" | | 68 | msg_n "$PKGNAME missing" |
69 | MISSING_TODO="$MISSING_TODO $PKGNAME $pkgdir" | | 69 | MISSING_TODO="$MISSING_TODO $PKGNAME $pkgdir" |
70 | fi | | 70 | fi |
71 | if is_binary_available $PKGNAME ;then | | 71 | if is_binary_available $PKGNAME ;then |
72 | msg_n " (binary package available)" | | 72 | msg_n " (binary package available)" |
73 | fi | | 73 | fi |
74 | msg | | 74 | msg |
75 | else | | 75 | else |
76 | if [ -n "$opt_B" ];then | | 76 | if [ -n "$opt_B" ];then |
77 | # sort here temporarily to handle older +BUILD_VERSION | | 77 | # sort here temporarily to handle older +BUILD_VERSION |
78 | current_build_ver=$(get_build_ver | ${SED} 's|.*\$Net''BSD\: ||' | ${SORT} -u) | | 78 | current_build_ver=$(get_build_ver | ${SED} 's|.*\$Net''BSD\: ||' | ${SORT} -u) |
79 | installed_build_ver=$(${SED} 's|.*\$Net''BSD\: ||' $PKG_DBDIR/$PKGNAME/+BUILD_VERSION | ${SORT} -u) | | 79 | installed_build_ver=$(${SED} 's|.*\$Net''BSD\: ||' $PKG_DBDIR/$PKGNAME/+BUILD_VERSION | ${SORT} -u) |
80 | if [ x"$current_build_ver" != x"$installed_build_ver" ];then | | 80 | if [ x"$current_build_ver" != x"$installed_build_ver" ];then |
81 | msg "$pkgdir - $PKGNAME build_version mismatch" | | 81 | msg "$pkgdir - $PKGNAME build_version mismatch" |
82 | verbose "--current--" | | 82 | verbose "--current--" |
83 | verbose "$current_build_ver" | | 83 | verbose "$current_build_ver" |
84 | verbose "--installed--" | | 84 | verbose "--installed--" |
85 | verbose "$installed_build_ver" | | 85 | verbose "$installed_build_ver" |
86 | verbose "----" | | 86 | verbose "----" |
87 | MISMATCH_TODO="$MISMATCH_TODO $PKGNAME" | | 87 | MISMATCH_TODO="$MISMATCH_TODO $PKGNAME" |
88 | else | | 88 | else |
89 | verbose "$PKGNAME: OK" | | 89 | verbose "$PKGNAME: OK" |
90 | fi | | 90 | fi |
91 | else | | 91 | else |
92 | verbose "$PKGNAME: OK" | | 92 | verbose "$PKGNAME: OK" |
93 | fi | | 93 | fi |
94 | fi | | 94 | fi |
95 | done | | 95 | done |
96 | } | | 96 | } |
97 | | | 97 | |
98 | cleanup_and_exit() | | 98 | cleanup_and_exit() |
99 | { | | 99 | { |
100 | rm -f $MY_TMPFILE | | 100 | rm -f $MY_TMPFILE |
101 | rmdir $MY_TMPDIR | | 101 | rmdir $MY_TMPDIR |
102 | exit "$@" | | 102 | exit "$@" |
103 | } | | 103 | } |
104 | | | 104 | |
105 | delete_pkgs() | | 105 | delete_pkgs() |
106 | { | | 106 | { |
107 | for pkg in $* ; do | | 107 | for pkg in $* ; do |
108 | if [ -d $PKG_DBDIR/$pkg ] ; then | | 108 | if [ -d $PKG_DBDIR/$pkg ] ; then |
109 | run_cmd_su "${PKG_DELETE} -r $pkg" 1 | | 109 | run_cmd_su "${PKG_DELETE} -r $pkg" 1 |
110 | fi | | 110 | fi |
111 | done | | 111 | done |
112 | } | | 112 | } |
113 | | | 113 | |
114 | extract_make_vars() | | 114 | extract_make_vars() |
115 | { | | 115 | { |
116 | MAKEFILE=$1 | | 116 | MAKEFILE=$1 |
117 | shift | | 117 | shift |
118 | MAKEDATA=".PHONY: x\nx:\n"; | | 118 | MAKEDATA=".PHONY: x\nx:\n"; |
119 | for var in $* ; do | | 119 | for var in $* ; do |
120 | MAKEDATA=$MAKEDATA"\t@echo $var=\${$var}\n" | | 120 | MAKEDATA=$MAKEDATA"\t@echo $var=\${$var}\n" |
121 | done | | 121 | done |
122 | eval $(printf "$MAKEDATA" | ${MAKE} -f - -f $MAKEFILE x | \ | | 122 | eval $(printf "$MAKEDATA" | ${MAKE} -f - -f $MAKEFILE x | \ |
123 | ${SED} -e 's/[^=]*=/&"/' -e 's/$/"/') | | 123 | ${SED} -e 's/[^=]*=/&"/' -e 's/$/"/') |
124 | for var in $* ; do | | 124 | for var in $* ; do |
125 | verbose_var $var | | 125 | verbose_var $var |
126 | done | | 126 | done |
127 | } | | 127 | } |
128 | | | 128 | |
129 | # $1 = name of variable | | 129 | # $1 = name of variable |
130 | # $2 = default value | | 130 | # $2 = default value |
131 | extract_mk_var() | | 131 | extract_mk_var() |
132 | { | | 132 | { |
133 | if [ -z "`eval echo \\$$1`" ] ; then | | 133 | if [ -z "`eval echo \\$$1`" ] ; then |
134 | eval $(printf "BSD_PKG_MK=1\n.PHONY: x\nx:\n\t@echo $1="'$'"{$1}\n" | ${MAKE} -f - -f $MAKECONF x) | | 134 | eval $(printf "BSD_PKG_MK=1\n.PHONY: x\nx:\n\t@echo $1="'$'"{$1}\n" | ${MAKE} -f - -f $MAKECONF x) |
135 | if [ -z "`eval echo \\$$1`" ]; then | | 135 | if [ -z "`eval echo \\$$1`" ]; then |
136 | eval "$1=$2" | | 136 | eval "$1=$2" |
137 | verbose_var $1 '(using default)' | | 137 | verbose_var $1 '(using default)' |
138 | else | | 138 | else |
139 | verbose_var $1 | | 139 | verbose_var $1 |
140 | fi | | 140 | fi |
141 | fi | | 141 | fi |
142 | } | | 142 | } |
143 | | | 143 | |
144 | extract_pkg_vars() | | 144 | extract_pkg_vars() |
145 | { | | 145 | { |
146 | PKGDIR=$1 | | 146 | PKGDIR=$1 |
147 | PKGNAME= | | 147 | PKGNAME= |
148 | shift; | | 148 | shift; |
149 | if [ ! -f $PKGSRCDIR/$pkgdir/Makefile ];then | | 149 | if [ ! -f $PKGSRCDIR/$pkgdir/Makefile ];then |
150 | msg "WARNING: No $pkgdir/Makefile - package moved or obsolete?" | | 150 | msg "WARNING: No $pkgdir/Makefile - package moved or obsolete?" |
151 | return | | 151 | return |
152 | fi | | 152 | fi |
153 | cd $PKGSRCDIR/$PKGDIR | | 153 | cd $PKGSRCDIR/$PKGDIR |
154 | extract_make_vars Makefile "$@" | | 154 | extract_make_vars Makefile "$@" |
155 | if [ -z "$PKGNAME" ]; then | | 155 | if [ -z "$PKGNAME" ]; then |
156 | fatal "Unable to extract PKGNAME for $pkgdir" | | 156 | fatal "Unable to extract PKGNAME for $pkgdir" |
157 | fi | | 157 | fi |
158 | } | | 158 | } |
159 | | | 159 | |
160 | extract_variables() | | 160 | extract_variables() |
161 | { | | 161 | { |
162 | extract_mk_var PKGSRCDIR '' | | 162 | extract_mk_var PKGSRCDIR '' |
163 | extract_mk_var LOCALBASE '' | | 163 | extract_mk_var LOCALBASE '' |
164 | if [ -z "$PKGSRCDIR" ] ; then | | 164 | if [ -z "$PKGSRCDIR" ] ; then |
165 | for dir in $LOCALBASE/pkgsrc /usr/pkgsrc . .. ../.. ; do | | 165 | for dir in $LOCALBASE/pkgsrc /usr/pkgsrc . .. ../.. ; do |
166 | if [ -f "${dir}/mk/bsd.pkg.mk" ]; then | | 166 | if [ -f "${dir}/mk/bsd.pkg.mk" ]; then |
167 | case "${dir}" in | | 167 | case "${dir}" in |
168 | /*) PKGSRCDIR="${dir}" ;; | | 168 | /*) PKGSRCDIR="${dir}" ;; |
169 | *) PKGSRCDIR="$( cd "${dir}" >/dev/null 2>&1 && pwd )" ;; | | 169 | *) PKGSRCDIR="$( cd "${dir}" >/dev/null 2>&1 && pwd )" ;; |
170 | esac | | 170 | esac |
171 | break | | 171 | break |
172 | fi | | 172 | fi |
173 | done | | 173 | done |
174 | fi | | 174 | fi |
175 | | | 175 | |
176 | if [ -z "$opt_g" ]; then | | 176 | if [ -z "$opt_g" ]; then |
177 | # Now we have PKGSRCDIR, use it to determine PACKAGES, and PKGCHK_CONF | | 177 | # Now we have PKGSRCDIR, use it to determine PACKAGES, and PKGCHK_CONF |
178 | # as well as AWK, GREP, SED, PKGCHK_TAGS and PKGCHK_NOTAGS | | 178 | # as well as AWK, GREP, SED, PKGCHK_TAGS and PKGCHK_NOTAGS |
179 | # | | 179 | # |
180 | if [ ! -d "$PKGSRCDIR" -a \( -z "$opt_b" -o -n "$opt_s" \) ] ; then | | 180 | if [ ! -d "$PKGSRCDIR" -a \( -z "$opt_b" -o -n "$opt_s" \) ] ; then |
181 | fatal "Unable to locate PKGSRCDIR (${PKGSRCDIR:-not set})" | | 181 | fatal "Unable to locate PKGSRCDIR (${PKGSRCDIR:-not set})" |
182 | fi | | 182 | fi |
183 | if [ -z "$opt_b" -o -n "$opt_s" -o -d $PKGSRCDIR/pkgtools/pkg_chk ] ; | | 183 | if [ -z "$opt_b" -o -n "$opt_s" -o -d $PKGSRCDIR/pkgtools/pkg_chk ] ; |
184 | then | | 184 | then |
185 | cd $PKGSRCDIR/pkgtools/pkg_chk | | 185 | cd $PKGSRCDIR/pkgtools/pkg_chk |
186 | extract_make_vars Makefile \ | | 186 | extract_make_vars Makefile \ |
187 | AWK GREP GZCAT GZIP_CMD ID PACKAGES PKGCHK_CONF PKGCHK_NOTAGS \ | | 187 | AWK GREP GZCAT GZIP_CMD ID PACKAGES PKGCHK_CONF PKGCHK_NOTAGS \ |
188 | PKGCHK_TAGS PKGCHK_UPDATE_CONF PKG_ADD PKG_DBDIR \ | | 188 | PKGCHK_TAGS PKGCHK_UPDATE_CONF PKG_ADD PKG_DBDIR \ |
189 | PKG_DELETE PKG_ADMIN PKG_INFO PKG_SUFX SED SORT SU_CMD TSORT | | 189 | PKG_DELETE PKG_ADMIN PKG_INFO PKG_SUFX SED SORT SU_CMD TSORT |
190 | if [ -z "$PACKAGES" ];then | | 190 | if [ -z "$PACKAGES" ];then |
191 | PACKAGES=$PKGSRCDIR/packages | | 191 | PACKAGES=$PKGSRCDIR/packages |
192 | fi | | 192 | fi |
193 | elif [ $MAKECONF != /dev/null ] ; then | | 193 | elif [ $MAKECONF != /dev/null ] ; then |
194 | extract_make_vars $MAKECONF PACKAGES PKGCHK_CONF \ | | 194 | extract_make_vars $MAKECONF PACKAGES PKGCHK_CONF \ |
195 | PKGCHK_UPDATE_CONF PKGCHK_TAGS PKGCHK_NOTAGS PKG_SUFX | | 195 | PKGCHK_UPDATE_CONF PKGCHK_TAGS PKGCHK_NOTAGS PKG_SUFX |
196 | if [ -z "$PACKAGES" ] ; then | | 196 | if [ -z "$PACKAGES" ] ; then |
197 | PACKAGES=`pwd` | | 197 | PACKAGES=`pwd` |
198 | fi | | 198 | fi |
199 | fi | | 199 | fi |
200 | fi | | 200 | fi |
201 | | | 201 | |
202 | # .tgz/.tbz to regexp | | 202 | # .tgz/.tbz to regexp |
203 | PKG_SUFX_RE=`echo $PKG_SUFX | ${SED} 's/[.]/[.]/'` | | 203 | PKG_SUFX_RE=`echo $PKG_SUFX | ${SED} 's/[.]/[.]/'` |
204 | | | 204 | |
205 | if [ ! -d $PKG_DBDIR ] ; then | | 205 | if [ ! -d $PKG_DBDIR ] ; then |
206 | fatal "Unable to access PKG_DBDIR ($PKG_DBDIR)" | | 206 | fatal "Unable to access PKG_DBDIR ($PKG_DBDIR)" |
207 | fi | | 207 | fi |
208 | | | 208 | |
209 | if [ -z "$PKGCHK_CONF" ];then | | 209 | if [ -z "$PKGCHK_CONF" ];then |
210 | PKGCHK_CONF=$PKGSRCDIR/pkgchk.conf | | 210 | PKGCHK_CONF=$PKGSRCDIR/pkgchk.conf |
211 | fi | | 211 | fi |
212 | if [ -z "$PKGCHK_UPDATE_CONF" ];then | | 212 | if [ -z "$PKGCHK_UPDATE_CONF" ];then |
213 | PKGCHK_UPDATE_CONF=$PKGSRCDIR/pkgchk_update-$(hostname).conf | | 213 | PKGCHK_UPDATE_CONF=$PKGSRCDIR/pkgchk_update-$(hostname).conf |
214 | fi | | 214 | fi |
215 | } | | 215 | } |
216 | | | 216 | |
217 | fatal() | | 217 | fatal() |
218 | { | | 218 | { |
219 | msg "*** $@" >&2 | | 219 | msg "*** $@" >&2 |
220 | cleanup_and_exit 1 | | 220 | cleanup_and_exit 1 |
221 | } | | 221 | } |
222 | | | 222 | |
223 | fatal_later() | | 223 | fatal_later() |
224 | { | | 224 | { |
225 | msg "*** $@" >&2 | | 225 | msg "*** $@" >&2 |
226 | fatal_later=1 | | 226 | fatal_later=1 |
227 | } | | 227 | } |
228 | | | 228 | |
229 | fatal_later_check() | | 229 | fatal_later_check() |
230 | { | | 230 | { |
231 | if [ "$fatal_later" = 1 ] ; then | | 231 | if [ "$fatal_later" = 1 ] ; then |
232 | cleanup_and_exit 1 | | 232 | cleanup_and_exit 1 |
233 | fi | | 233 | fi |
234 | } | | 234 | } |
235 | | | 235 | |
236 | fatal_maybe() | | 236 | fatal_maybe() |
237 | { | | 237 | { |
238 | if [ -z "$opt_k" ];then | | 238 | if [ -z "$opt_k" ];then |
239 | fatal "$@" | | 239 | fatal "$@" |
240 | else | | 240 | else |
241 | msg "$@" | | 241 | msg "$@" |
242 | fi | | 242 | fi |
243 | } | | 243 | } |
244 | | | 244 | |
245 | generate_conf_from_installed() | | 245 | generate_conf_from_installed() |
246 | { | | 246 | { |
247 | FILE=$1 | | 247 | FILE=$1 |
248 | if [ -r $FILE ]; then | | 248 | if [ -r $FILE ]; then |
249 | mv $FILE ${FILE}.old | | 249 | mv $FILE ${FILE}.old |
250 | fi | | 250 | fi |
251 | echo "# Generated automatically at $(date)" > $FILE | | 251 | echo "# Generated automatically at $(date)" > $FILE |
252 | echo $(pkgdirs_from_installed) | tr ' ' '\n' >> $FILE | | 252 | echo $(pkgdirs_from_installed) | tr ' ' '\n' >> $FILE |
253 | } | | 253 | } |
254 | | | 254 | |
255 | get_bin_pkg_info() | | 255 | get_bin_pkg_info() |
256 | { | | 256 | { |
257 | summary_file=$PACKAGES/$SUMMARY_FILE | | 257 | summary_file=$PACKAGES/$SUMMARY_FILE |
258 | if [ -f $summary_file ] ; then | | 258 | if [ -f $summary_file ] ; then |
259 | if [ -z "$(find $PACKAGES -type f -newer $summary_file -name '*.t[bg]z')" ] ; then | | 259 | if [ -z "$(find $PACKAGES -type f -newer $summary_file -name '*.t[bg]z')" ] ; then |
260 | msg_progress Reading $summary_file | | 260 | msg_progress Reading $summary_file |
261 | ${GZCAT} $summary_file | | 261 | ${GZCAT} $summary_file |
262 | return; | | 262 | return; |
263 | fi | | 263 | fi |
264 | echo "*** Ignoring $SUMMARY_FILE as PACKAGES contains newer files" >&2 | | 264 | echo "*** Ignoring $SUMMARY_FILE as PACKAGES contains newer files" >&2 |
265 | fi | | 265 | fi |
266 | msg_progress Scan $PACKAGES | | 266 | msg_progress Scan $PACKAGES |
267 | list_bin_pkgs | ${XARGS} ${PKG_INFO} -X | | 267 | list_bin_pkgs | ${XARGS} ${PKG_INFO} -X |
268 | } | | 268 | } |
269 | | | 269 | |
270 | get_build_ver() | | 270 | get_build_ver() |
271 | { | | 271 | { |
272 | if [ -n "$opt_b" -a -z "$opt_s" ] ; then | | 272 | if [ -n "$opt_b" -a -z "$opt_s" ] ; then |
273 | ${PKG_INFO} -q -b $PACKAGES/$PKGNAME$PKG_SUFX | ${GREP} . | | 273 | ${PKG_INFO} -q -b $PACKAGES/$PKGNAME$PKG_SUFX | ${GREP} . |
274 | return | | 274 | return |
275 | fi | | 275 | fi |
276 | # Unfortunately pkgsrc always outputs to a file, but it does | | 276 | # Unfortunately pkgsrc always outputs to a file, but it does |
277 | # helpfully allows us to specify the name | | 277 | # helpfully allows us to specify the name |
278 | rm -f $MY_TMPFILE | | 278 | rm -f $MY_TMPFILE |
279 | ${MAKE} _BUILD_VERSION_FILE=$MY_TMPFILE $MY_TMPFILE | | 279 | ${MAKE} _BUILD_VERSION_FILE=$MY_TMPFILE $MY_TMPFILE |
280 | cat $MY_TMPFILE | | 280 | cat $MY_TMPFILE |
281 | } | | 281 | } |
282 | | | 282 | |
283 | list_bin_pkgs () | | 283 | list_bin_pkgs () |
284 | { | | 284 | { |
285 | ls -t $PACKAGES | grep "$PKG_SUFX_RE"'$' | ${SED} "s|^|$PACKAGES/|" | | 285 | ls -t $PACKAGES | grep "$PKG_SUFX_RE"'$' | ${SED} "s|^|$PACKAGES/|" |
286 | } | | 286 | } |
287 | | | 287 | |
288 | # Given a binary package filename as the first argumennt, return a list | | 288 | # Given a binary package filename as the first argumennt, return a list |
289 | # of exact package versions against which it was built and on which it | | 289 | # of exact package versions against which it was built and on which it |
290 | # depends | | 290 | # depends |
291 | # | | 291 | # |
292 | list_dependencies() | | 292 | list_dependencies() |
293 | { | | 293 | { |
294 | ${PKG_INFO} -q -n $1 | ${GREP} .. || true | | 294 | ${PKG_INFO} -q -n $1 | ${GREP} .. || true |
295 | } | | 295 | } |
296 | | | 296 | |
297 | # Pass a list of pkgdirs, outputs a tsorted list including any dependencies | | 297 | # Pass a list of pkgdirs, outputs a tsorted list including any dependencies |
298 | # | | 298 | # |
299 | list_packages() | | 299 | list_packages() |
300 | { | | 300 | { |
301 | # Convert passed in list of pkgdirs to a list of binary package files | | 301 | # Convert passed in list of pkgdirs to a list of binary package files |
302 | pkglist='' | | 302 | pkglist='' |
303 | for pkgdir in $* ; do | | 303 | for pkgdir in $* ; do |
304 | pkgname=`pkgdir2pkgname $pkgdir` | | 304 | pkgname=`pkgdir2pkgname $pkgdir` |
305 | if [ -z "$pkgname" ]; then | | 305 | if [ -z "$pkgname" ]; then |
306 | fatal_later "$pkgdir - Unable to extract pkgname" | | 306 | fatal_later "$pkgdir - Unable to extract pkgname" |
307 | continue | | 307 | continue |
308 | fi | | 308 | fi |
309 | if is_binary_available $pkgname ; then | | 309 | if is_binary_available $pkgname ; then |
310 | pkglist="$pkglist $pkgname$PKG_SUFX" | | 310 | pkglist="$pkglist $pkgname$PKG_SUFX" |
311 | else | | 311 | else |
312 | fatal_later "$pkgname - no binary package found" | | 312 | fatal_later "$pkgname - no binary package found" |
313 | fi | | 313 | fi |
314 | done | | 314 | done |
315 | | | 315 | |
316 | # Variables used in this loop: | | 316 | # Variables used in this loop: |
317 | # pkglist: Current list of binary package files to check for dependencies | | 317 | # pkglist: Current list of binary package files to check for dependencies |
318 | # next_pkglist: List of binary package files to check after pkglist | | 318 | # next_pkglist: List of binary package files to check after pkglist |
319 | # pairlist: completed list of package + dependency for use in tsort | | 319 | # pairlist: completed list of package + dependency for use in tsort |
320 | while [ -n "$pkglist" ] ; do | | 320 | while [ -n "$pkglist" ] ; do |
321 | verbose "pkglist: $pkglist" | | 321 | verbose "pkglist: $pkglist" |
322 | for pkg in $pkglist ; do | | 322 | for pkg in $pkglist ; do |
323 | set -o noglob | | 323 | set -o noglob |
324 | deplist="$(list_dependencies $PACKAGES/$pkg)" | | 324 | deplist="$(list_dependencies $PACKAGES/$pkg)" |
325 | verbose "$pkg: dependencies - `echo $deplist`" | | 325 | verbose "$pkg: dependencies - `echo $deplist`" |
326 | if [ -n "$deplist" ] ; then | | 326 | if [ -n "$deplist" ] ; then |
327 | for depmatch in $deplist ; do | | 327 | for depmatch in $deplist ; do |
328 | dep=`${PKG_ADMIN} -b -d $PACKAGES lsbest "$depmatch"` | | 328 | dep=`${PKG_ADMIN} -b -d $PACKAGES lsbest "$depmatch"` |
329 | if [ -z "$dep" ] ; then | | 329 | if [ -z "$dep" ] ; then |
330 | fatal_later "$depmatch: dependency missing for $pkg" | | 330 | fatal_later "$depmatch: dependency missing for $pkg" |
331 | else | | 331 | else |
332 | pairlist="$pairlist$dep $pkg\n" | | 332 | pairlist="$pairlist$dep $pkg\n" |
333 | case $dep_cache in | | 333 | case $dep_cache in |
334 | *" $dep "*) | | 334 | *" $dep "*) |
335 | # depmatch_cache is a quick cache of already | | 335 | # depmatch_cache is a quick cache of already |
336 | verbose "$pkg: $deplist - cached" | | 336 | verbose "$pkg: $deplist - cached" |
337 | ;; | | 337 | ;; |
338 | *) | | 338 | *) |
339 | next_pkglist="$next_pkglist $dep" | | 339 | next_pkglist="$next_pkglist $dep" |
340 | dep_cache="$dep_cache $dep " | | 340 | dep_cache="$dep_cache $dep " |
341 | ;; | | 341 | ;; |
342 | esac | | 342 | esac |
343 | fi | | 343 | fi |
344 | done | | 344 | done |
345 | else | | 345 | else |
346 | pairlist="$pairlist$pkg $pkg\n" | | 346 | pairlist="$pairlist$pkg $pkg\n" |
347 | fi | | 347 | fi |
348 | set +o noglob | | 348 | set +o noglob |
349 | done | | 349 | done |
350 | pkglist="$next_pkglist" | | 350 | pkglist="$next_pkglist" |
351 | next_pkglist= | | 351 | next_pkglist= |
352 | done | | 352 | done |
353 | if [ -z "$opt_k" ] ; then | | 353 | if [ -z "$opt_k" ] ; then |
354 | fatal_later_check | | 354 | fatal_later_check |
355 | fi | | 355 | fi |
356 | printf "$pairlist" | ${TSORT} | | 356 | printf "$pairlist" | ${TSORT} |
357 | } | | 357 | } |
358 | | | 358 | |
359 | pkgdir2pkgname() | | 359 | pkgdir2pkgname() |
360 | { | | 360 | { |
361 | pkgdir=$1 | | 361 | pkgdir=$1 |
362 | for pkgline in $PKGDB ; do | | 362 | for pkgline in $PKGDB ; do |
363 | case $pkgline in | | 363 | case $pkgline in |
364 | "$pkgdir:"*) | | 364 | "$pkgdir:"*) |
365 | echo $pkgline | ${SED} 's/[^:]*://' | | 365 | echo $pkgline | ${SED} 's/[^:]*://' |
366 | return; | | 366 | return; |
367 | ;; | | 367 | ;; |
368 | esac | | 368 | esac |
369 | done | | 369 | done |
370 | } | | 370 | } |
371 | | | 371 | |
372 | pkgdirs_from_conf() | | 372 | determine_tags() |
373 | { | | 373 | { |
374 | CONF=$1; shift | | | |
375 | LIST="$*" | | | |
376 | if [ ! -r $CONF ];then | | | |
377 | fatal "Unable to read PKGCHK_CONF '$CONF'" | | | |
378 | fi | | | |
379 | | | | |
380 | # Determine list of tags | | 374 | # Determine list of tags |
381 | # | | 375 | # |
382 | if [ "$PKGSRCDIR" = NONE ]; then | | 376 | if [ "$PKGSRCDIR" = NONE ]; then |
383 | OPSYS=$(uname -s) | | 377 | OPSYS=$(uname -s) |
384 | OS_VERSION=$(uname -r) | | 378 | OS_VERSION=$(uname -r) |
385 | MACHINE_ARCH=$(uname -p) | | 379 | MACHINE_ARCH=$(uname -p) |
386 | else | | 380 | else |
387 | extract_make_vars Makefile OPSYS OS_VERSION MACHINE_ARCH | | 381 | extract_make_vars Makefile OPSYS OS_VERSION MACHINE_ARCH |
388 | fi | | 382 | fi |
389 | | | 383 | |
390 | TAGS="$(hostname | ${SED} -e 's,\..*,,'),$(hostname),$OPSYS-$OS_VERSION-$MACHINE_ARCH,$OPSYS-$OS_VERSION,$OPSYS-$MACHINE_ARCH,$OPSYS,$OS_VERSION,$MACHINE_ARCH" | | 384 | TAGS="$(hostname | ${SED} -e 's,\..*,,'),$(hostname),$OPSYS-$OS_VERSION-$MACHINE_ARCH,$OPSYS-$OS_VERSION,$OPSYS-$MACHINE_ARCH,$OPSYS,$OS_VERSION,$MACHINE_ARCH" |
391 | if [ -f /usr/X11R6/lib/libX11.so -o -f /usr/X11R6/lib/libX11.a ];then | | 385 | if [ -f /usr/X11R7/lib/libX11.a -o -f /usr/X11R6/lib/libX11.a ];then |
392 | TAGS="$TAGS,x11" | | 386 | TAGS="$TAGS,x11" |
393 | fi | | 387 | fi |
394 | if [ -n "$PKGCHK_TAGS" ];then | | 388 | if [ -n "$PKGCHK_TAGS" ];then |
395 | TAGS="$TAGS,$PKGCHK_TAGS" | | 389 | TAGS="$TAGS,$PKGCHK_TAGS" |
396 | fi | | 390 | fi |
397 | if [ -n "$PKGCHK_NOTAGS" ];then | | 391 | if [ -n "$PKGCHK_NOTAGS" ];then |
398 | if [ -n "$opt_U" ];then | | 392 | if [ -n "$opt_U" ];then |
399 | opt_U="$opt_U,$PKGCHK_NOTAGS" | | 393 | opt_U="$opt_U,$PKGCHK_NOTAGS" |
400 | else | | 394 | else |
401 | opt_U="$PKGCHK_NOTAGS" | | 395 | opt_U="$PKGCHK_NOTAGS" |
402 | fi | | 396 | fi |
403 | fi | | 397 | fi |
404 | | | 398 | |
405 | # If '-U' contains a '*' then we need to unset TAGS and PKGCHK_TAGS, but | | 399 | # If '-U' contains a '*' then we need to unset TAGS and PKGCHK_TAGS, but |
406 | # still pick up -D, and even package specific -U options | | 400 | # still pick up -D, and even package specific -U options |
407 | verbose "unset TAGS=$opt_U" | | 401 | verbose "unset TAGS=$opt_U" |
408 | case ",$opt_U," in | | 402 | case ",$opt_U," in |
409 | *,\*,*) | | 403 | *,\*,*) |
410 | TAGS='' | | 404 | TAGS='' |
411 | ;; | | 405 | ;; |
412 | esac | | 406 | esac |
413 | if [ -n "$TAGS" ];then | | 407 | if [ -n "$TAGS" ];then |
414 | if [ -n "$opt_D" ];then | | 408 | if [ -n "$opt_D" ];then |
415 | opt_D="$opt_D,$TAGS" | | 409 | opt_D="$opt_D,$TAGS" |
416 | else | | 410 | else |
417 | opt_D="$TAGS" | | 411 | opt_D="$TAGS" |
418 | fi | | 412 | fi |
419 | fi | | 413 | fi |
420 | verbose "set TAGS=$opt_D" | | 414 | verbose "set TAGS=$opt_D" |
| | | 415 | } |
| | | 416 | |
| | | 417 | pkgdirs_from_conf() |
| | | 418 | { |
| | | 419 | CONF=$1; shift |
| | | 420 | LIST="$*" |
| | | 421 | if [ ! -r $CONF ];then |
| | | 422 | fatal "Unable to read PKGCHK_CONF '$CONF'" |
| | | 423 | fi |
| | | 424 | |
421 | | | 425 | |
422 | # Extract list of valid pkgdirs (skip any 'alreadyset' in $LIST) | | 426 | # Extract list of valid pkgdirs (skip any 'alreadyset' in $LIST) |
423 | # | | 427 | # |
424 | LIST="$LIST "$(${AWK} -v alreadyset="$LIST" -v setlist="$opt_D" -v unsetlist="$opt_U" ' | | 428 | LIST="$LIST "$(${AWK} -v alreadyset="$LIST" -v setlist="$opt_D" -v unsetlist="$opt_U" ' |
425 | BEGIN { | | 429 | BEGIN { |
426 | split(alreadyset, tmp, " "); | | 430 | split(alreadyset, tmp, " "); |
427 | for (tag in tmp) { skip[tmp[tag]] = 1; } | | 431 | for (tag in tmp) { skip[tmp[tag]] = 1; } |
428 | | | 432 | |
429 | split(setlist, tmp, ","); | | 433 | split(setlist, tmp, ","); |
430 | for (tag in tmp) { taglist[tmp[tag]] = 1; } | | 434 | for (tag in tmp) { taglist[tmp[tag]] = 1; } |
431 | | | 435 | |
432 | split(unsetlist, tmp, ","); | | 436 | split(unsetlist, tmp, ","); |
433 | for (tag in tmp) { skip[tmp[tag]] = 1; nofile[tmp[tag]] = 1 ; | | 437 | for (tag in tmp) { skip[tmp[tag]] = 1; nofile[tmp[tag]] = 1 ; |
434 | delete taglist[tmp[tag]] } | | 438 | delete taglist[tmp[tag]] } |
435 | | | 439 | |
436 | taglist["*"] = "*" | | 440 | taglist["*"] = "*" |
437 | } | | 441 | } |
438 | function and_expr_with_dict(expr, dict, ary, i, r, d) { | | 442 | function and_expr_with_dict(expr, dict, ary, i, r, d) { |
439 | split(expr,ary,/\+/); | | 443 | split(expr,ary,/\+/); |
440 | r = 1; | | 444 | r = 1; |
441 | for (i in ary) { | | 445 | for (i in ary) { |
442 | if (ary[i] ~ /^\// && ! nofile[ary[i]]) { | | 446 | if (ary[i] ~ /^\// && ! nofile[ary[i]]) { |
443 | if (getline d < ary[i] == -1) | | 447 | if (getline d < ary[i] == -1) |
444 | { r = 0; break ;} | | 448 | { r = 0; break ;} |
445 | } | | 449 | } |
446 | else if (! (ary[i] in dict)) | | 450 | else if (! (ary[i] in dict)) |
447 | { r = 0; break ;} | | 451 | { r = 0; break ;} |
448 | } | | 452 | } |
449 | return r; | | 453 | return r; |
450 | } | | 454 | } |
451 | { | | 455 | { |
452 | sub("#.*", ""); | | 456 | sub("#.*", ""); |
453 | if (skip[$1]) | | 457 | if (skip[$1]) |
454 | next; | | 458 | next; |
455 | need = 0; | | 459 | need = 0; |
456 | if ($0 ~ /\=/) { | | 460 | if ($0 ~ /\=/) { |
457 | split($0, tmp, "[ \t]*="); | | 461 | split($0, tmp, "[ \t]*="); |
458 | taggroup = tmp[1]; | | 462 | taggroup = tmp[1]; |
459 | sub("[ \t]*=", "="); | | 463 | sub("[ \t]*=", "="); |
460 | } | | 464 | } |
461 | else | | 465 | else |
462 | { | | 466 | { |
463 | taggroup = "" | | 467 | taggroup = "" |
464 | if (NF == 1) # If only one arg, we want pkg | | 468 | if (NF == 1) # If only one arg, we want pkg |
465 | need = 1; | | 469 | need = 1; |
466 | } | | 470 | } |
467 | for (f = 2 ; f<=NF ; ++f) { # For each word on the line | | 471 | for (f = 2 ; f<=NF ; ++f) { # For each word on the line |
468 | if (sub("^-", "", $f)) { # If it begins with a '-' | | 472 | if (sub("^-", "", $f)) { # If it begins with a '-' |
469 | if (f == 2) # If first entry '-', assume '*' | | 473 | if (f == 2) # If first entry '-', assume '*' |
470 | { need = 1; } | | 474 | { need = 1; } |
471 | if (and_expr_with_dict($f, taglist)) | | 475 | if (and_expr_with_dict($f, taglist)) |
472 | next; # If it is true, discard | | 476 | next; # If it is true, discard |
473 | } else { | | 477 | } else { |
474 | if (and_expr_with_dict($f, taglist)) | | 478 | if (and_expr_with_dict($f, taglist)) |
475 | need = 1; # If it is true, note needed | | 479 | need = 1; # If it is true, note needed |
476 | } | | 480 | } |
477 | } | | 481 | } |
478 | if (need) | | 482 | if (need) |
479 | if (taggroup) | | 483 | if (taggroup) |
480 | taglist[taggroup] = 1 | | 484 | taglist[taggroup] = 1 |
481 | else | | 485 | else |
482 | print $1; | | 486 | print $1; |
483 | } | | 487 | } |
484 | ' < $CONF | | 488 | ' < $CONF |
485 | ) | | 489 | ) |
486 | echo $LIST | | 490 | echo $LIST |
487 | } | | 491 | } |
488 | | | 492 | |
489 | pkgdirs_from_installed() | | 493 | pkgdirs_from_installed() |
490 | { | | 494 | { |
491 | ${PKG_INFO} -Bqa | ${AWK} -F= '/^PKGPATH=/{print $2}' | ${SORT} | | 495 | ${PKG_INFO} -Bqa | ${AWK} -F= '/^PKGPATH=/{print $2}' | ${SORT} |
492 | } | | 496 | } |
493 | | | 497 | |
494 | msg() | | 498 | msg() |
495 | { | | 499 | { |
496 | if [ -n "$opt_L" ] ; then | | 500 | if [ -n "$opt_L" ] ; then |
497 | echo "$@" >> "$opt_L" | | 501 | echo "$@" >> "$opt_L" |
498 | fi | | 502 | fi |
499 | if [ -n "$opt_l" ] ; then | | 503 | if [ -n "$opt_l" ] ; then |
500 | echo "$@" >&2 | | 504 | echo "$@" >&2 |
501 | else | | 505 | else |
502 | echo "$@" | | 506 | echo "$@" |
503 | fi | | 507 | fi |
504 | } | | 508 | } |
505 | | | 509 | |
506 | msg_progress() | | 510 | msg_progress() |
507 | { | | 511 | { |
508 | if [ -z "$opt_q" ] ; then | | 512 | if [ -z "$opt_q" ] ; then |
509 | msg "[ $@ ]" | | 513 | msg "[ $@ ]" |
510 | fi | | 514 | fi |
511 | } | | 515 | } |
512 | | | 516 | |
513 | msg_n() | | 517 | msg_n() |
514 | { | | 518 | { |
515 | msg $ac_n "$*"$ac_c | | 519 | msg $ac_n "$*"$ac_c |
516 | } | | 520 | } |
517 | | | 521 | |
518 | pkg_fetch() | | 522 | pkg_fetch() |
519 | { | | 523 | { |
520 | PKGNAME=$1 | | 524 | PKGNAME=$1 |
521 | PKGDIR=$2 | | 525 | PKGDIR=$2 |
522 | | | 526 | |
523 | run_cmd "cd $PKGSRCDIR/$PKGDIR && ${MAKE} fetch-list | sh" | | 527 | run_cmd "cd $PKGSRCDIR/$PKGDIR && ${MAKE} fetch-list | sh" |
524 | if [ -n "$FAIL" ]; then | | 528 | if [ -n "$FAIL" ]; then |
525 | FAIL_DONE=$FAIL_DONE" "$PKGNAME | | 529 | FAIL_DONE=$FAIL_DONE" "$PKGNAME |
526 | else | | 530 | else |
527 | FETCH_DONE=$FETCH_DONE" "$PKGNAME | | 531 | FETCH_DONE=$FETCH_DONE" "$PKGNAME |
528 | fi | | 532 | fi |
529 | } | | 533 | } |
530 | | | 534 | |
531 | pkg_fetchlist() | | 535 | pkg_fetchlist() |
532 | { | | 536 | { |
533 | PKGLIST=$@ | | 537 | PKGLIST=$@ |
534 | msg_progress Fetch | | 538 | msg_progress Fetch |
535 | while [ $# != 0 ]; do | | 539 | while [ $# != 0 ]; do |
536 | pkg_fetch $1 $2 | | 540 | pkg_fetch $1 $2 |
537 | shift ; shift; | | 541 | shift ; shift; |
538 | done | | 542 | done |
539 | } | | 543 | } |
540 | | | 544 | |
541 | pkg_install() | | 545 | pkg_install() |
542 | { | | 546 | { |
543 | PKGNAME=$1 | | 547 | PKGNAME=$1 |
544 | PKGDIR=$2 | | 548 | PKGDIR=$2 |
545 | INSTALL=$3 | | 549 | INSTALL=$3 |
546 | | | 550 | |
547 | FAIL= | | 551 | FAIL= |
548 | if [ -d $PKG_DBDIR/$PKGNAME ];then | | 552 | if [ -d $PKG_DBDIR/$PKGNAME ];then |
549 | msg "$PKGNAME installed in previous stage" | | 553 | msg "$PKGNAME installed in previous stage" |
550 | run_cmd_su "${PKG_ADMIN} unset automatic $PKGNAME" | | 554 | run_cmd_su "${PKG_ADMIN} unset automatic $PKGNAME" |
551 | elif [ -n "$opt_b" ] && is_binary_available $PKGNAME; then | | 555 | elif [ -n "$opt_b" ] && is_binary_available $PKGNAME; then |
552 | if [ -n "$saved_PKG_PATH" ] ; then | | 556 | if [ -n "$saved_PKG_PATH" ] ; then |
553 | export PKG_PATH=$saved_PKG_PATH | | 557 | export PKG_PATH=$saved_PKG_PATH |
554 | fi | | 558 | fi |
555 | run_cmd_su "${PKG_ADD} $PACKAGES/$PKGNAME$PKG_SUFX" | | 559 | run_cmd_su "${PKG_ADD} $PACKAGES/$PKGNAME$PKG_SUFX" |
556 | if [ -n "$saved_PKG_PATH" ] ; then | | 560 | if [ -n "$saved_PKG_PATH" ] ; then |
557 | unset PKG_PATH | | 561 | unset PKG_PATH |
558 | fi | | 562 | fi |
559 | elif [ -n "$opt_s" ]; then | | 563 | elif [ -n "$opt_s" ]; then |
560 | run_cmd "cd $PKGSRCDIR/$PKGDIR && ${MAKE} update CLEANDEPENDS=yes" | | 564 | run_cmd "cd $PKGSRCDIR/$PKGDIR && ${MAKE} update CLEANDEPENDS=yes" |
561 | fi | | 565 | fi |
562 | | | 566 | |
563 | if [ -z "$opt_n" -a -z "$opt_q" -a ! -d $PKG_DBDIR/$PKGNAME ];then | | 567 | if [ -z "$opt_n" -a -z "$opt_q" -a ! -d $PKG_DBDIR/$PKGNAME ];then |
564 | FAIL=1 | | 568 | FAIL=1 |
565 | fi | | 569 | fi |
566 | | | 570 | |
567 | if [ -n "$FAIL" ]; then | | 571 | if [ -n "$FAIL" ]; then |
568 | FAIL_DONE=$FAIL_DONE" "$PKGNAME | | 572 | FAIL_DONE=$FAIL_DONE" "$PKGNAME |
569 | else | | 573 | else |
570 | INSTALL_DONE=$INSTALL_DONE" "$PKGNAME | | 574 | INSTALL_DONE=$INSTALL_DONE" "$PKGNAME |
571 | fi | | 575 | fi |
572 | } | | 576 | } |
573 | | | 577 | |
574 | pkg_installlist() | | 578 | pkg_installlist() |
575 | { | | 579 | { |
576 | INSTALL=$1 ; shift | | 580 | INSTALL=$1 ; shift |
577 | msg_progress $INSTALL | | 581 | msg_progress $INSTALL |
578 | while [ $# != 0 ]; do | | 582 | while [ $# != 0 ]; do |
579 | pkg_install $1 $2 $INSTALL | | 583 | pkg_install $1 $2 $INSTALL |
580 | shift ; shift; | | 584 | shift ; shift; |
581 | done | | 585 | done |
582 | } | | 586 | } |
583 | | | 587 | |
584 | run_cmd() | | 588 | run_cmd() |
585 | { | | 589 | { |
586 | FAIL= | | 590 | FAIL= |
587 | if [ -n "$2" ]; then | | 591 | if [ -n "$2" ]; then |
588 | FAILOK=$2 | | 592 | FAILOK=$2 |
589 | else | | 593 | else |
590 | FAILOK=$opt_k | | 594 | FAILOK=$opt_k |
591 | fi | | 595 | fi |
592 | if [ -z "$opt_q" ];then | | 596 | if [ -z "$opt_q" ];then |
593 | msg $(date +%R) $1 | | 597 | msg $(date +%R) $1 |
594 | fi | | 598 | fi |
595 | if [ -z "$opt_n" -a -z "$opt_q" ];then | | 599 | if [ -z "$opt_n" -a -z "$opt_q" ];then |
596 | if [ -n "$opt_L" ] ; then | | 600 | if [ -n "$opt_L" ] ; then |
597 | sh -c "$1" >> "$opt_L" 2>&1 || FAIL=1 | | 601 | sh -c "$1" >> "$opt_L" 2>&1 || FAIL=1 |
598 | else | | 602 | else |
599 | sh -c "$1" || FAIL=1 | | 603 | sh -c "$1" || FAIL=1 |
600 | fi | | 604 | fi |
601 | if [ -n "$FAIL" ] ; then | | 605 | if [ -n "$FAIL" ] ; then |
602 | msg "** '$1' failed" | | 606 | msg "** '$1' failed" |
603 | if [ -n "$opt_L" ] ; then | | 607 | if [ -n "$opt_L" ] ; then |
604 | tail -100 "$opt_L" | egrep -v '^(\*\*\* Error code 1|Stop\.)' |\ | | 608 | tail -100 "$opt_L" | egrep -v '^(\*\*\* Error code 1|Stop\.)' |\ |
605 | tail -40 | | 609 | tail -40 |
606 | fi | | 610 | fi |
607 | if [ "$FAILOK" != 1 ]; then | | 611 | if [ "$FAILOK" != 1 ]; then |
608 | fatal "** '$1' failed" | | 612 | fatal "** '$1' failed" |
609 | fi | | 613 | fi |
610 | fi | | 614 | fi |
611 | fi | | 615 | fi |
612 | } | | 616 | } |
613 | | | 617 | |
614 | run_cmd_su() | | 618 | run_cmd_su() |
615 | { | | 619 | { |
616 | if [ -n "$SU_CMD" ]; then | | 620 | if [ -n "$SU_CMD" ]; then |
617 | run_cmd "${SU_CMD} '$1'" "$2" | | 621 | run_cmd "${SU_CMD} '$1'" "$2" |
618 | else | | 622 | else |
619 | run_cmd "$1" "$2" | | 623 | run_cmd "$1" "$2" |
620 | fi | | 624 | fi |
621 | } | | 625 | } |
622 | | | 626 | |
623 | set_path() | | 627 | set_path() |
624 | { | | 628 | { |
625 | arg=$1 | | 629 | arg=$1 |
626 | case $arg in | | 630 | case $arg in |
627 | http://*|ftp://*|/*) | | 631 | http://*|ftp://*|/*) |
628 | echo $arg ;; | | 632 | echo $arg ;; |
629 | *) echo $basedir/$arg ;; | | 633 | *) echo $basedir/$arg ;; |
630 | esac | | 634 | esac |
631 | } | | 635 | } |
632 | | | 636 | |
633 | usage() | | 637 | usage() |
634 | { | | 638 | { |
635 | if [ -n "$1" ] ; then | | 639 | if [ -n "$1" ] ; then |
636 | echo "$@" | | 640 | echo "$@" |
637 | echo | | 641 | echo |
638 | fi | | 642 | fi |
639 | echo 'Usage: pkg_chk [opts] | | 643 | echo 'Usage: pkg_chk [opts] |
640 | -a Add all missing packages | | 644 | -a Add all missing packages |
641 | -B Check the "Build version" of packages | | 645 | -B Check the "Build version" of packages |
642 | -b Use binary packages | | 646 | -b Use binary packages |
643 | -C conf Use pkgchk.conf file 'conf' | | 647 | -C conf Use pkgchk.conf file 'conf' |
644 | -D tags Comma separated list of additional pkgchk.conf tags to set | | 648 | -D tags Comma separated list of additional pkgchk.conf tags to set |
645 | -f Perform a 'make fetch' for all required packages | | 649 | -f Perform a 'make fetch' for all required packages |
646 | -g Generate an initial pkgchk.conf file | | 650 | -g Generate an initial pkgchk.conf file |
647 | -h This help | | 651 | -h This help |
648 | -k Continue with further packages if errors are encountered | | 652 | -k Continue with further packages if errors are encountered |
649 | -L file Redirect output from commands run into file (should be fullpath) | | 653 | -L file Redirect output from commands run into file (should be fullpath) |
650 | -l List binary packages including dependencies | | 654 | -l List binary packages including dependencies |
651 | -N List installed packages for which a newer version is in TODO | | 655 | -N List installed packages for which a newer version is in TODO |
652 | -n Display actions that would be taken, but do not perform them | | 656 | -n Display actions that would be taken, but do not perform them |
653 | -p Display the list of pkgdirs that match the current tags | | 657 | -p Display the list of pkgdirs that match the current tags |
654 | -P dir Set PACKAGES dir (overrides any other setting) | | 658 | -P dir Set PACKAGES dir (overrides any other setting) |
655 | -q Do not display actions or take any action; only list packages | | 659 | -q Do not display actions or take any action; only list packages |
656 | -r Recursively remove mismatches (use with care) | | 660 | -r Recursively remove mismatches (use with care) |
657 | -s Use source for building packages | | 661 | -s Use source for building packages |
658 | -U tags Comma separated list of pkgchk.conf tags to unset ('*' for all) | | 662 | -U tags Comma separated list of pkgchk.conf tags to unset ('*' for all) |
659 | -u Update all mismatched packages | | 663 | -u Update all mismatched packages |
660 | -v Verbose | | 664 | -v Verbose |
661 | | | 665 | |
662 | pkg_chk verifies installed packages against pkgsrc. | | 666 | pkg_chk verifies installed packages against pkgsrc. |
663 | The most common usage is 'pkg_chk -u -q' to check all installed packages or | | 667 | The most common usage is 'pkg_chk -u -q' to check all installed packages or |
664 | 'pkg_chk -u' to update all out of date packages. | | 668 | 'pkg_chk -u' to update all out of date packages. |
665 | For more advanced usage, including defining a set of desired packages based | | 669 | For more advanced usage, including defining a set of desired packages based |
666 | on hostname and type, see pkg_chk(8). | | 670 | on hostname and type, see pkg_chk(8). |
667 | | | 671 | |
668 | If neither -b nor -s is given, both are assumed with -b preferred. | | 672 | If neither -b nor -s is given, both are assumed with -b preferred. |
669 | ' | | 673 | ' |
670 | exit 1 | | 674 | exit 1 |
671 | } | | 675 | } |
672 | | | 676 | |
673 | verbose() | | 677 | verbose() |
674 | { | | 678 | { |
675 | if [ -n "$opt_v" ] ; then | | 679 | if [ -n "$opt_v" ] ; then |
676 | msg "$@" >&2 | | 680 | msg "$@" >&2 |
677 | fi | | 681 | fi |
678 | } | | 682 | } |
679 | | | 683 | |
680 | verbose_var() | | 684 | verbose_var() |
681 | { | | 685 | { |
682 | if [ -n "$opt_v" ] ; then | | 686 | if [ -n "$opt_v" ] ; then |
683 | var=$1 | | 687 | var=$1 |
684 | shift | | 688 | shift |
685 | verbose Variable $var = $(eval echo \$$var) $@ | | 689 | verbose Variable $var = $(eval echo \$$var) $@ |
686 | fi | | 690 | fi |
687 | } | | 691 | } |
688 | | | 692 | |
689 | args=$(getopt BC:D:L:P:U:abcfghiklNnpqrsuv "$@") | | 693 | args=$(getopt BC:D:L:P:U:abcfghiklNnpqrsuv "$@") |
690 | if [ $? != 0 ]; then | | 694 | if [ $? != 0 ]; then |
691 | opt_h=1 | | 695 | opt_h=1 |
692 | fi | | 696 | fi |
693 | set -o noglob # -U can be '*' | | 697 | set -o noglob # -U can be '*' |
694 | set -- $args | | 698 | set -- $args |
695 | set +o noglob | | 699 | set +o noglob |
696 | while [ $# != 0 ]; do | | 700 | while [ $# != 0 ]; do |
697 | case "$1" in | | 701 | case "$1" in |
698 | -a ) opt_a=1 ;; | | 702 | -a ) opt_a=1 ;; |
699 | -B ) opt_B=1 ;; | | 703 | -B ) opt_B=1 ;; |
700 | -b ) opt_b=1 ;; | | 704 | -b ) opt_b=1 ;; |
701 | -C ) opt_C="$2" ; shift ;; | | 705 | -C ) opt_C="$2" ; shift ;; |
702 | -c ) opt_a=1 ; opt_q=1 ; echo "-c is deprecated - use -a -q" ;; | | 706 | -c ) opt_a=1 ; opt_q=1 ; echo "-c is deprecated - use -a -q" ;; |
703 | -D ) opt_D="$2" ; shift ;; | | 707 | -D ) opt_D="$2" ; shift ;; |
704 | -f ) opt_f=1 ;; | | 708 | -f ) opt_f=1 ;; |
705 | -g ) opt_g=1 ;; | | 709 | -g ) opt_g=1 ;; |
706 | -h ) opt_h=1 ;; | | 710 | -h ) opt_h=1 ;; |
707 | -i ) opt_u=1 ; opt_q=1 ; echo "-i is deprecated - use -u -q" ;; | | 711 | -i ) opt_u=1 ; opt_q=1 ; echo "-i is deprecated - use -u -q" ;; |
708 | -k ) opt_k=1 ;; | | 712 | -k ) opt_k=1 ;; |
709 | -L ) opt_L="$2" ; shift ;; | | 713 | -L ) opt_L="$2" ; shift ;; |
710 | -l ) opt_l=1 ;; | | 714 | -l ) opt_l=1 ;; |
711 | -N ) opt_N=1 ;; | | 715 | -N ) opt_N=1 ;; |
712 | -n ) opt_n=1 ;; | | 716 | -n ) opt_n=1 ;; |
713 | -p ) opt_p=1 ;; | | 717 | -p ) opt_p=1 ;; |
714 | -P ) opt_P="$2" ; shift ;; | | 718 | -P ) opt_P="$2" ; shift ;; |
715 | -q ) opt_q=1 ;; | | 719 | -q ) opt_q=1 ;; |
716 | -r ) opt_r=1 ;; | | 720 | -r ) opt_r=1 ;; |
717 | -s ) opt_s=1 ;; | | 721 | -s ) opt_s=1 ;; |
718 | -U ) opt_U="$2" ; shift ;; | | 722 | -U ) opt_U="$2" ; shift ;; |
719 | -u ) opt_u=1 ;; | | 723 | -u ) opt_u=1 ;; |
720 | -v ) opt_v=1 ;; | | 724 | -v ) opt_v=1 ;; |
721 | -- ) shift; break ;; | | 725 | -- ) shift; break ;; |
722 | esac | | 726 | esac |
723 | shift | | 727 | shift |
724 | done | | 728 | done |
725 | | | 729 | |
726 | if [ -z "$opt_b" -a -z "$opt_s" ];then | | 730 | if [ -z "$opt_b" -a -z "$opt_s" ];then |
727 | opt_b=1; opt_s=1; | | 731 | opt_b=1; opt_s=1; |
728 | fi | | 732 | fi |
729 | | | 733 | |
730 | if [ -z "$opt_a$opt_g$opt_l$opt_p$opt_r$opt_u$opt_N" ]; | | 734 | if [ -z "$opt_a$opt_g$opt_l$opt_p$opt_r$opt_u$opt_N" ]; |
731 | then | | 735 | then |
732 | usage "Must specify at least one of -a, -g, -l, -p, -r, -u or -N"; | | 736 | usage "Must specify at least one of -a, -g, -l, -p, -r, -u or -N"; |
733 | fi | | 737 | fi |
734 | | | 738 | |
735 | if [ -n "$opt_h" ];then | | 739 | if [ -n "$opt_h" ];then |
736 | usage | | 740 | usage |
737 | fi | | 741 | fi |
738 | | | 742 | |
739 | if [ $# != 0 ];then | | 743 | if [ $# != 0 ];then |
740 | usage "Additional argument ($*) given" | | 744 | usage "Additional argument ($*) given" |
741 | fi | | 745 | fi |
742 | | | 746 | |
743 | # Hide PKG_PATH to avoid breakage in 'make' calls | | 747 | # Hide PKG_PATH to avoid breakage in 'make' calls |
744 | saved_PKG_PATH=$PKG_PATH | | 748 | saved_PKG_PATH=$PKG_PATH |
745 | unset PKG_PATH || true | | 749 | unset PKG_PATH || true |
746 | | | 750 | |
747 | test -n "$AWK" || AWK="@AWK@" | | 751 | test -n "$AWK" || AWK="@AWK@" |
748 | test -n "$GREP" || GREP="@GREP@" | | 752 | test -n "$GREP" || GREP="@GREP@" |
749 | test -n "$GZCAT" || GZCAT="@GZCAT@" | | 753 | test -n "$GZCAT" || GZCAT="@GZCAT@" |
750 | test -n "$GZIP_CMD" || GZIP_CMD="@GZIP_CMD@" | | 754 | test -n "$GZIP_CMD" || GZIP_CMD="@GZIP_CMD@" |
751 | export GZIP_CMD | | 755 | export GZIP_CMD |
752 | test -n "$ID" || ID="@ID@" | | 756 | test -n "$ID" || ID="@ID@" |
753 | test -n "$MAKE" || MAKE="@MAKE@" | | 757 | test -n "$MAKE" || MAKE="@MAKE@" |
754 | test -n "$MAKECONF" || MAKECONF="@MAKECONF@" | | 758 | test -n "$MAKECONF" || MAKECONF="@MAKECONF@" |
755 | test -n "$MKTEMP" || MKTEMP="@MKTEMP@" | | 759 | test -n "$MKTEMP" || MKTEMP="@MKTEMP@" |
756 | test -n "$PKG_ADD" || PKG_ADD="@PKG_ADD@" | | 760 | test -n "$PKG_ADD" || PKG_ADD="@PKG_ADD@" |
757 | test -n "$PKG_ADMIN" || PKG_ADMIN="@PKG_ADMIN@" | | 761 | test -n "$PKG_ADMIN" || PKG_ADMIN="@PKG_ADMIN@" |
758 | test -n "$PKG_DBDIR" || PKG_DBDIR="@PKG_DBDIR@" | | 762 | test -n "$PKG_DBDIR" || PKG_DBDIR="@PKG_DBDIR@" |
759 | test -n "$PKG_DELETE" || PKG_DELETE="@PKG_DELETE@" | | 763 | test -n "$PKG_DELETE" || PKG_DELETE="@PKG_DELETE@" |
760 | test -n "$PKG_INFO" || PKG_INFO="@PKG_INFO@" | | 764 | test -n "$PKG_INFO" || PKG_INFO="@PKG_INFO@" |
761 | test -n "$SED" || SED="@SED@" | | 765 | test -n "$SED" || SED="@SED@" |
762 | test -n "$SORT" || SORT="@SORT@" | | 766 | test -n "$SORT" || SORT="@SORT@" |
763 | test -n "$TSORT" || TSORT="@TSORT@" | | 767 | test -n "$TSORT" || TSORT="@TSORT@" |
764 | test -n "$XARGS" || XARGS="@XARGS@" | | 768 | test -n "$XARGS" || XARGS="@XARGS@" |
765 | | | 769 | |
766 | MY_TMPDIR=`${MKTEMP} -d ${TMPDIR-/tmp}/${0##*/}.XXXXXX` | | 770 | MY_TMPDIR=`${MKTEMP} -d ${TMPDIR-/tmp}/${0##*/}.XXXXXX` |
767 | test -n "$MY_TMPDIR" || fatal "Couldn't create temporary directory." | | 771 | test -n "$MY_TMPDIR" || fatal "Couldn't create temporary directory." |
768 | MY_TMPFILE=$MY_TMPDIR/tmp | | 772 | MY_TMPFILE=$MY_TMPDIR/tmp |
769 | | | 773 | |
770 | if [ -z "$MAKECONF" ] ; then | | 774 | if [ -z "$MAKECONF" ] ; then |
771 | for mkconf in "@MAKECONF@" "@PREFIX@/etc/mk.conf" /etc/mk.conf ; do | | 775 | for mkconf in "@MAKECONF@" "@PREFIX@/etc/mk.conf" /etc/mk.conf ; do |
772 | if [ -f "$mkconf" ] ; then | | 776 | if [ -f "$mkconf" ] ; then |
773 | MAKECONF="$mkconf" | | 777 | MAKECONF="$mkconf" |
774 | break | | 778 | break |
775 | fi | | 779 | fi |
776 | done | | 780 | done |
777 | fi | | 781 | fi |
778 | if [ -z "$MAKECONF" -o ! -f "$MAKECONF" ] ; then | | 782 | if [ -z "$MAKECONF" -o ! -f "$MAKECONF" ] ; then |
779 | MAKECONF=/dev/null | | 783 | MAKECONF=/dev/null |
780 | fi | | 784 | fi |
781 | verbose_var MAKECONF | | 785 | verbose_var MAKECONF |
782 | | | 786 | |
783 | # grabbed from GNU configure | | 787 | # grabbed from GNU configure |
784 | if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then | | 788 | if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then |
785 | # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. | | 789 | # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. |
786 | if (echo -n testing; echo 1,2,3) | ${SED} s/-n/xn/ | grep xn >/dev/null; then | | 790 | if (echo -n testing; echo 1,2,3) | ${SED} s/-n/xn/ | grep xn >/dev/null; then |
787 | ac_n= ac_c=' | | 791 | ac_n= ac_c=' |
788 | ' ac_t=' ' | | 792 | ' ac_t=' ' |
789 | else | | 793 | else |
790 | ac_n=-n ac_c= ac_t= | | 794 | ac_n=-n ac_c= ac_t= |
791 | fi | | 795 | fi |
792 | else | | 796 | else |
793 | ac_n= ac_c='\c' ac_t= | | 797 | ac_n= ac_c='\c' ac_t= |
794 | fi | | 798 | fi |
795 | | | 799 | |
796 | if [ -n "$opt_L" ] ; then | | 800 | if [ -n "$opt_L" ] ; then |
797 | printf '' > $opt_L | | 801 | printf '' > $opt_L |
798 | fi | | 802 | fi |
799 | | | 803 | |
800 | basedir=$(pwd) | | 804 | basedir=$(pwd) |
801 | extract_variables | | 805 | extract_variables |
802 | if [ -n "$opt_C" ] ; then | | 806 | if [ -n "$opt_C" ] ; then |
803 | PKGCHK_CONF="$(set_path $opt_C)" | | 807 | PKGCHK_CONF="$(set_path $opt_C)" |
804 | fi | | 808 | fi |
805 | if [ -n "$opt_P" ] ; then | | 809 | if [ -n "$opt_P" ] ; then |
806 | PACKAGES="$(set_path $opt_P)" | | 810 | PACKAGES="$(set_path $opt_P)" |
807 | fi | | 811 | fi |
808 | if [ -d $PACKAGES/All ] ; then | | 812 | if [ -d $PACKAGES/All ] ; then |
809 | PACKAGES="$PACKAGES/All" | | 813 | PACKAGES="$PACKAGES/All" |
810 | fi | | 814 | fi |
811 | | | 815 | |
812 | if [ "`${ID} -u`" = 0 ] ; then | | 816 | if [ "`${ID} -u`" = 0 ] ; then |
813 | SU_CMD= | | 817 | SU_CMD= |
814 | fi | | 818 | fi |
815 | | | 819 | |
816 | if [ -n "$opt_N" ]; then | | 820 | if [ -n "$opt_N" ]; then |
817 | ${PKG_INFO} | \ | | 821 | ${PKG_INFO} | \ |
818 | ${SED} -e "s/[ ].*//" -e "s/-[^-]*$//" \ | | 822 | ${SED} -e "s/[ ].*//" -e "s/-[^-]*$//" \ |
819 | -e "s/py[0-9][0-9]pth-/py-/" \ | | 823 | -e "s/py[0-9][0-9]pth-/py-/" \ |
820 | -e "s/py[0-9][0-9]-/py-/" | \ | | 824 | -e "s/py[0-9][0-9]-/py-/" | \ |
821 | while read a | | 825 | while read a |
822 | do | | 826 | do |
823 | b=$(grep "o $a-[0-9]" $PKGSRCDIR/doc/TODO | \ | | 827 | b=$(grep "o $a-[0-9]" $PKGSRCDIR/doc/TODO | \ |
824 | ${SED} -e "s/[ ]*o //") | | 828 | ${SED} -e "s/[ ]*o //") |
825 | if [ "$b" ] | | 829 | if [ "$b" ] |
826 | then | | 830 | then |
827 | echo $a: $b | | 831 | echo $a: $b |
828 | fi | | 832 | fi |
829 | done | | 833 | done |
830 | fi | | 834 | fi |
831 | | | 835 | |
832 | AWK_PARSE_SUMMARY='$1=="PKGNAME"{pkgname=$2} $1=="PKGPATH"{pkgpath=$2} NF==0{if (pkgpath && pkgname) print pkgpath ":" pkgname; pkgpath=""; pkgname=""} END{if (pkgpath && pkgname) print pkgpath ":" pkgname}' | | 836 | AWK_PARSE_SUMMARY='$1=="PKGNAME"{pkgname=$2} $1=="PKGPATH"{pkgpath=$2} NF==0{if (pkgpath && pkgname) print pkgpath ":" pkgname; pkgpath=""; pkgname=""} END{if (pkgpath && pkgname) print pkgpath ":" pkgname}' |
833 | | | 837 | |
834 | if [ -n "$opt_b" -a -z "$opt_s" ] ; then | | 838 | if [ -n "$opt_b" -a -z "$opt_s" ] ; then |
835 | case $PACKAGES in | | 839 | case $PACKAGES in |
836 | http://*|ftp://*) | | 840 | http://*|ftp://*) |
837 | PKGDB=`ftp -o - $PACKAGES/$SUMMARY_FILE | ${GZIP_CMD} -cd \ | | 841 | PKGDB=`ftp -o - $PACKAGES/$SUMMARY_FILE | ${GZIP_CMD} -cd \ |
838 | | ${AWK} -F= "$AWK_PARSE_SUMMARY"` | | 842 | | ${AWK} -F= "$AWK_PARSE_SUMMARY"` |
839 | if [ -z "$PKGDB" ] | | 843 | if [ -z "$PKGDB" ] |
840 | then | | 844 | then |
841 | PKGDB=`ftp -o - $PACKAGES/$OLD_SUMMARY_FILE` | | 845 | PKGDB=`ftp -o - $PACKAGES/$OLD_SUMMARY_FILE` |
842 | fi;; | | 846 | fi;; |
843 | *) | | 847 | *) |
844 | if [ -d "$PACKAGES" ] ; then | | 848 | if [ -d "$PACKAGES" ] ; then |
845 | PKGDB=$(get_bin_pkg_info | bin_pkg_info2pkgdb) | | 849 | PKGDB=$(get_bin_pkg_info | bin_pkg_info2pkgdb) |
846 | PKGSRCDIR=NONE | | 850 | PKGSRCDIR=NONE |
847 | fi;; | | 851 | fi;; |
848 | esac | | 852 | esac |
849 | fi | | 853 | fi |
850 | | | 854 | |
| | | 855 | determine_tags |
| | | 856 | |
851 | if [ -n "$opt_g" ]; then | | 857 | if [ -n "$opt_g" ]; then |
852 | verbose "Write $PKGCHK_CONF based on installed packages" | | 858 | verbose "Write $PKGCHK_CONF based on installed packages" |
853 | generate_conf_from_installed $PKGCHK_CONF | | 859 | generate_conf_from_installed $PKGCHK_CONF |
854 | fi | | 860 | fi |
855 | | | 861 | |
856 | if [ -n "$opt_r" -o -n "$opt_u" ];then | | 862 | if [ -n "$opt_r" -o -n "$opt_u" ];then |
857 | verbose "Enumerate PKGDIRLIST from installed packages" | | 863 | verbose "Enumerate PKGDIRLIST from installed packages" |
858 | PKGDIRLIST=$(pkgdirs_from_installed) | | 864 | PKGDIRLIST=$(pkgdirs_from_installed) |
859 | fi | | 865 | fi |
860 | | | 866 | |
861 | if [ -n "$opt_p" ] ; then | | 867 | if [ -n "$opt_p" ] ; then |
862 | pkgdirs_from_conf $PKGCHK_CONF $PKGDIRLIST | tr ' ' '\n' | | 868 | pkgdirs_from_conf $PKGCHK_CONF $PKGDIRLIST | tr ' ' '\n' |
863 | exit | | 869 | exit |
864 | fi | | 870 | fi |
865 | | | 871 | |
866 | if [ -n "$opt_a" -o -n "$opt_l" ];then # Append to PKGDIRLIST based on conf | | 872 | if [ -n "$opt_a" -o -n "$opt_l" ];then # Append to PKGDIRLIST based on conf |
867 | verbose "Append to PKGDIRLIST based on config $PKGCHK_CONF" | | 873 | verbose "Append to PKGDIRLIST based on config $PKGCHK_CONF" |
868 | PKGDIRLIST="$(pkgdirs_from_conf $PKGCHK_CONF $PKGDIRLIST)" | | 874 | PKGDIRLIST="$(pkgdirs_from_conf $PKGCHK_CONF $PKGDIRLIST)" |
869 | fi | | 875 | fi |
870 | | | 876 | |
871 | if [ -n "$opt_l" ] ; then | | 877 | if [ -n "$opt_l" ] ; then |
872 | list_packages $PKGDIRLIST | | 878 | list_packages $PKGDIRLIST |
873 | else | | 879 | else |
874 | check_packages_installed $PKGDIRLIST | | 880 | check_packages_installed $PKGDIRLIST |
875 | fi | | 881 | fi |
876 | | | 882 | |
877 | if [ -n "$MISMATCH_TODO" ]; then | | 883 | if [ -n "$MISMATCH_TODO" ]; then |
878 | delete_and_recheck=1 | | 884 | delete_and_recheck=1 |
879 | elif [ -n "$opt_u" -a -f $PKGCHK_UPDATE_CONF ] ; then | | 885 | elif [ -n "$opt_u" -a -f $PKGCHK_UPDATE_CONF ] ; then |
880 | delete_and_recheck=1 | | 886 | delete_and_recheck=1 |
881 | fi | | 887 | fi |
882 | | | 888 | |
883 | if [ -n "$delete_and_recheck" ]; then | | 889 | if [ -n "$delete_and_recheck" ]; then |
884 | if [ -n "$opt_u" ] ; then # Save current installed list | | 890 | if [ -n "$opt_u" ] ; then # Save current installed list |
885 | if [ -f $PKGCHK_UPDATE_CONF ] ; then | | 891 | if [ -f $PKGCHK_UPDATE_CONF ] ; then |
886 | msg "Merging in previous $PKGCHK_UPDATE_CONF" | | 892 | msg "Merging in previous $PKGCHK_UPDATE_CONF" |
887 | if [ -z "$opt_n" -a -z "$opt_q" ] ; then | | 893 | if [ -z "$opt_n" -a -z "$opt_q" ] ; then |
888 | tmp=$(cat $PKGCHK_UPDATE_CONF) | | 894 | tmp=$(cat $PKGCHK_UPDATE_CONF) |
889 | echo $tmp $(pkgdirs_from_installed) | tr ' ' '\n' | ${SORT} -u \ | | 895 | echo $tmp $(pkgdirs_from_installed) | tr ' ' '\n' | ${SORT} -u \ |
890 | > $PKGCHK_UPDATE_CONF | | 896 | > $PKGCHK_UPDATE_CONF |
891 | tmp= | | 897 | tmp= |
892 | fi | | 898 | fi |
893 | else | | 899 | else |
894 | if [ -z "$opt_n" -a -z "$opt_q" ] ; then | | 900 | if [ -z "$opt_n" -a -z "$opt_q" ] ; then |
895 | echo $(pkgdirs_from_installed) | tr ' ' '\n' \ | | 901 | echo $(pkgdirs_from_installed) | tr ' ' '\n' \ |
896 | > $PKGCHK_UPDATE_CONF | | 902 | > $PKGCHK_UPDATE_CONF |
897 | fi | | 903 | fi |
898 | fi | | 904 | fi |
899 | fi | | 905 | fi |
900 | if [ -n "$opt_r" -o -n "$opt_u" ] ; then | | 906 | if [ -n "$opt_r" -o -n "$opt_u" ] ; then |
901 | if [ -n "$MISMATCH_TODO" ]; then | | 907 | if [ -n "$MISMATCH_TODO" ]; then |
902 | delete_pkgs $MISMATCH_TODO | | 908 | delete_pkgs $MISMATCH_TODO |
903 | msg_progress Rechecking packages after deletions | | 909 | msg_progress Rechecking packages after deletions |
904 | fi | | 910 | fi |
905 | if [ -n "$opt_u" ]; then | | 911 | if [ -n "$opt_u" ]; then |
906 | PKGDIRLIST="$(pkgdirs_from_conf $PKGCHK_UPDATE_CONF $PKGDIRLIST)" | | 912 | PKGDIRLIST="$(pkgdirs_from_conf $PKGCHK_UPDATE_CONF $PKGDIRLIST)" |
907 | fi | | 913 | fi |
908 | if [ -n "$opt_a" -o -n "$opt_u" ]; then | | 914 | if [ -n "$opt_a" -o -n "$opt_u" ]; then |
909 | check_packages_installed $PKGDIRLIST # May need to add more | | 915 | check_packages_installed $PKGDIRLIST # May need to add more |
910 | fi | | 916 | fi |
911 | fi | | 917 | fi |
912 | fi | | 918 | fi |
913 | | | 919 | |
914 | if [ -n "$opt_f" ] ; then | | 920 | if [ -n "$opt_f" ] ; then |
915 | pkg_fetchlist $MISSING_TODO | | 921 | pkg_fetchlist $MISSING_TODO |
916 | fi | | 922 | fi |
917 | | | 923 | |
918 | if [ -n "$MISSING_TODO" ] ; then | | 924 | if [ -n "$MISSING_TODO" ] ; then |
919 | if [ -n "$opt_a" -o -n "$opt_u" ] ; then | | 925 | if [ -n "$opt_a" -o -n "$opt_u" ] ; then |
920 | pkg_installlist Install $MISSING_TODO | | 926 | pkg_installlist Install $MISSING_TODO |
921 | fi | | 927 | fi |
922 | fi | | 928 | fi |
923 | | | 929 | |
924 | if [ -n "$opt_u" -a -z "$FAIL_DONE" -a -f $PKGCHK_UPDATE_CONF ] ; then | | 930 | if [ -n "$opt_u" -a -z "$FAIL_DONE" -a -f $PKGCHK_UPDATE_CONF ] ; then |
925 | run_cmd "rm -f $PKGCHK_UPDATE_CONF" | | 931 | run_cmd "rm -f $PKGCHK_UPDATE_CONF" |
926 | fi | | 932 | fi |
927 | | | 933 | |
928 | [ -z "$MISS_DONE" ] || msg "Missing:$MISS_DONE" | | 934 | [ -z "$MISS_DONE" ] || msg "Missing:$MISS_DONE" |
929 | [ -z "$INSTALL_DONE" ] || msg "Installed:$INSTALL_DONE" | | 935 | [ -z "$INSTALL_DONE" ] || msg "Installed:$INSTALL_DONE" |
930 | | | 936 | |
931 | if [ -n "$FAIL_DONE" ] ; then | | 937 | if [ -n "$FAIL_DONE" ] ; then |
932 | msg "Failed:$FAIL_DONE" | | 938 | msg "Failed:$FAIL_DONE" |
933 | cleanup_and_exit 1 | | 939 | cleanup_and_exit 1 |
934 | fi | | 940 | fi |
935 | | | 941 | |
936 | cleanup_and_exit | | 942 | cleanup_and_exit |